java 多线程ITeye - AG环亚娱乐集团

java 多线程ITeye

2019年03月28日09时49分47秒 | 作者: 忆文 | 标签: 线程,作业,内存 | 浏览: 125

一.房子相当于进程Process,自身无法做什么。里边住了很多人,就相当于线程Thread,同享这个房子的资源。可是,厕所一次只能进一个人,进去的人会上锁。厨房只能进去有限的人,会在门口放几把钥匙,进去的人会取一把,出来时再放回去。钥匙取完时,其它人只能在门口等着。

二.jvm的可见性:当一个同享变量在多个线程作业内存中都存在副本时,假如一个线程修改了这个同享变量,其他线程能够看到这个修改后的值,即可见性。

三.jvm的有序性:假如有个同享变量x,线程a履行x=x+1,线程b履行x=x-1。

a的履行次序:

1 从主存中读取变量x副本到作业内存

2 给x加1

3 将x加1后的值写回主 存

b的履行次序:

1 从主存中读取变量x副本到作业内存

2 给x减1

3 将x减1后的值写回主存

实际上次序有可能是这样的:

1:线程a从主存读取x副本到作业内存,作业内存中x值为10

2:线程b从主存读取x副本到作业内存,作业内存中x值为10

3:线程a将作业内存中x加1,作业内存中x值为11

4:线程a将x提交主存中,主存中x为11

5:线程b将作业内存中x值减1,作业内存中x值为9

6:线程b将x提交到中主存中,主存中x为9

 

synchronized关键字能够确保一个线程核算时,同享变量处于上锁状况:

1 取得同步锁

2 清空作业内存

3 从主存复制变量副本到作业内存

4 对这些变量核算

5 将变量从作业内存写回到主存

6 开释锁

 

olatile关键字,开支比synchronized要小,可是它只能确保可见性,无法确保有序性。volatile会直接操作主存,没有线程对作业内存和主存同步。比较合适直接给同享变量赋值这种操作。

四、多线程仍是多进程

http://blog.csdn.net/lishenglong666/article/details/8557215

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    java 多线程ITeye

    线程,作业,内存
  • 2

    vba upgradeITeye

    文件,程序,晋级
  • 3
  • 4

    ClassLoaderITeye

    运用,文件,办法
  • 5
  • 6

    手机号码校验合法性ITeye

    代表,必定,第二位
  • 7
  • 8

    Java 目标巨细的核算ITeye

    目标,巨细,字节
  • 9
  • 10