黑马程序员——多线程进阶(一)

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

多线程与CPU和内存的关系

 

来自百度知道.

这个回答我认为是很好的比喻了.

CPU对进程操作时不是同时进行,我们知道windows操作系统里面有许多的进程,而CPU是一个一个的来操作这些进程的,当然,多核CPU就可以实现同时操作这些进程,所以为什么CPU核数越多电脑速度越快就是这样,但是内存是一个瓶颈,不能超过这个内存数.

根据上面说的CPU是一个一个的来控制着进程的(高速切换),那么就会出现一个问题,如果我们启动多个线程控制着一个进程里面的数据时,因为CPU是一个一个的处理,而线程可以实现并发,万一要是CPU刚好处理到这里以后跳到其他进程处理时,启动的线程又在处理这个进程的数据,那么就会出现安全隐患,比如:

2个线程控制一个进程的数据

其中一个线程1执行这个进程的数据时CPU刚好切换,线程1被挂起.

这时如果线程2获得CPU执行权时,线程2就执行这个进程的数据,执行完线程1被激活执行数据.

int x = 1;

String name;

int Money;

void run()

{

if(x > 0)//线程1判断完符合条件被挂起,线程2进入判断符合条件

{

      x = x - 1;

      name = “kvieta丶心灵”;

      Money += 1000;

       //银行核心代码

       ……

}

}

根据以上代码结合文字说明,那么我的账户上面岂不是有了2000块钱了!赚了…

解决办法:java中提供一个关键字synchronized,它包括两种用法:synchronized 方法和 synchronized 块

详情可以参阅API.

同步函数中控制线程的进出用this,同步的静态函数中控制线程的进出用该函数所属的类对应的字节码文件.

时间: 2024-10-05 19:59:54

黑马程序员——多线程进阶(一)的相关文章

黑马程序员—多线程

进程:一个正在执行的程序. 线程:就是进程中一个独立的控制单元,线程在控制进程的执行,一个进程中至少有 一个线程. 主线程:JVM启动的时候会有一个进程java.exe,该进程中至少有一个负责java程序的执行 而且这个线程运行的代码存在于main方法中,该线程称之位主线程. 创建线程的方式有两种: 方法一: 1.定义类继承Thread2.复写Thread类中的run方法 目的:将自定义代码存储在run方法中,让线程运行3.调用线程的start方法 该方法有两个作用:启动线程,调用run方法(存

黑马程序员 - 多线程

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 多线程进程:一个正在执行中的程序,每一个进行执行,都有一个执行顺序,该顺序就是一个执行路径,或者加一个执行单元线程:就是进程中的一个独立的执行路径,一个进程中至少有一个线程.java vm启动的时候会有一个进程java.exe.该进程中至少一个线程负责执行java程序的执行,而且这个线程运行的代码存在于main方法中.该线程称之为主线程.扩展:其中更细节说明java vm启动不止一个线程,还有

黑马程序员——多线程

一.概述 (一)进程 正在执行中的程序,每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. (二)线程 进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程.只要进程中有一个线程在执行,进程就不会结束. (三)多线程 在java虚拟机启动的时候会有一个java.exe的执行程序,也就是一个进程.该进程中至少有一个线程负责java程序的执行.而且这个线程运行的代码存在于main方法中.该线程称之为主线程.JVM启动除了执行一个主线程,还有负责垃圾回收

黑马程序员——多线程总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 多线程和进程的区别? 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程

黑马程序员------多线程(一)

1.1多线程的概念 1.1.1 进程.线程.多进程的概念进程:是一个正在执行中的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元. 线程在控制着进程的执行. 一个进程中至少有一个线程. Java VM 启动的时候会有一个进程java.exe. 该进程中至少一个线程负责java程序的执行.而且这个线程运行的代码存在于main方法中.该线程称之为主线程. 扩展:其实更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的

黑马程序员----多线程基础

/*** @author Administrator** @description Java多线程编程入门测试类* @history*/// 方法一.继承线程类Threadclass MyThread extends Thread{public MyThread(String threadName){ // 设置当前线程的名称currentThread().setName(threadName);}public void run(){System.out.println(Thread.curre

黑马程序员——多线程下的单例设计模式的安全问题

//多线程下的单例设计模式 class Sing { //饿汉式不存在安全问题,因为其不是线程同步的 private static Sing s = new Sing(); private Sing(){} public static Sing getInstance() { return s; } } class Single { private static Single s = null; private Single(){} public static Single getInstanc

黑马程序员--多线程同步的一层对象/二层对象/三层对象写法对比

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 前言: 在面向对象的思想下,线程的写法根据要创建的对象层级可以分为三种写法: 1,一层对象写法:采用extends Thread,复写父类的run()方法,直接建立一个线程实例对象的方式,这种方式简单,适用于单任务的单线程需求.在此不做过多讨论; 2,二层对象写法:采用implements Runnable接口,复写接口的run()方法,得到二级对象--通常称为任务对象;再通过将二级对象传入(

黑马程序员--多线程(二)

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!------- 多线程的安全问题 产生原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来,导致了共享数据错误. 解决办法:对多条操作共享数据的语句只能让一个线程都执行完,在执行过程中其他线程不可以