多线程

Posted _裸奔到月球

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。

  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的缓存区中存储的该变量的值会失效。所以保证访问的变量都是最新指。

 

以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章

什么是多线程,多进程?

多线程和多进程模式有啥区别

多线程Java多线程学习笔记 | 多线程基础知识

java中啥叫做线程?啥叫多线程?多线程的特点是啥

c++ 多线程与c多线程有啥区别?

IOS多线程安全(线程锁)