码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2017-09-21 20:53:22      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:volatile   执行   存储   nbsp   自己   一个   调用   可见性   run   

  0、进程代表运行中的程序,线程是进程中可独立执行的子任务,可以看成是执行Java代码的最小单位。

  1、上下文切换:

    当一个线程由RUNNABLE转态向非RUNNABLE转态(如BLOCKED:线程等待锁释放,WAITING:线程里调用wait()一直等待notify,TIME_WAITING:等待一段时间),相应线程的上下文信息需要被保存,以便相应线程再次进入RUNNABLE转态时能够在之前执行的进度基础上继续前进。所以对线程的上下文 信息进行保存和回复的过程就被称为上下文切换。

  2、原子性,内存可见性,synchronized和volatile

   synchronized作用:实现操作的原子性(保证在任何时刻只有一个线程能够执行临界区中的代码),以及保证内存的可见性。但会导致上下文切换。

   内存可见性:为了减少变量访问的时间,可能把变量缓存到CPU的缓存区。因此相应代码再次访问某个变量时,相应值可能 从CPU缓存而不是主内存中读取的。同样修改可能 没被写入主内存。由于每个CPU都有自己的缓存区,所以一个CPU缓存的变量对其他CPU不可见,导致了其他CPU线程无法看到该线程对某个变量值做出的改变。

   valance:可以保证内存可见性,但不能保证操作原子性。,且不会导致上下文切换。机制:当一个线程改变了一个volatile变量值时,该值会被写入朱内存而不仅仅是缓存区,而其他CPU的缓存区中存储的该变量的值会失效。所以保证访问的变量都是最新指。

 

多线程

标签:volatile   执行   存储   nbsp   自己   一个   调用   可见性   run   

原文地址:http://www.cnblogs.com/luobentomoon/p/7570172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!