目录
多线程的三个特性:
a.原子性
是指一个操作是不可中断,即使多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰;简单看几个例子:
1)int x=10; 2)int y=x; 3)x++; 4.x=x+1;
这上面四个语句,区分哪些是原子操作,哪些非原子操作?
1)第一句,直接把10赋值给x的工作内存,这个操作是不可再分的,并且很直接,这就是原子操作;
2)第二句,先读取x的值,然后将x的值写入到y的工作内存,这个可分割,并且不直接,这就不是原子操作 ;
3)第三句,其实和第四句一样都是执行x+1;先读取x的值,然后进行+1操作,才会将新值写入x的工作内存;
所以可以看出来,所谓的原子操作,原子性就是直接对一个变量进行操作,中间没有别的操作(实际指的是操作不可分割性);
b.可见性
是指当线程1修改某一个共享变量的值,线程1修改完成以后,线程2能够立即知道修改完成后共享变量的值,那么说明是可见的;可见性就是说线程之间操作共享变量时,彼此之间都知道;
c.有序性
有序性就是指执行代码是有序去执行,线程1先执行,完了之后线程2再去执行;
1.什么是多线程并发?
在Android或者Java开发中,遇到多线程并发问题的时候次数比较多,多线程并发是指多条线程共同访问同一个数据源时,往往不能得到预期结果;产生无法获取预期结果的原因是什么?其实就是该共同访问数据源对多线程没有可见性,这些线程不能有序性的去操作共同的数据源,还不是原子操作,所以导致预期结果不一样;
2.机器内存分配及线程对内存操作(操作示例)
2.1机器内存分配
2.2线程对内存操作
在“机器内存分配”图可以看到JVM栈也就是Java虚拟机栈,每个线程启动都会有