线程小知识

一、yieldhtml

        Thread.yield(),是将线程从执行状态(运行状态)变为可执行状态(就绪状态),cpu会从众多可执行状态线程选择,也就是说线程执行yield方法也可能会再次执行。安全

若是以为一个线程不是那么重要,或者优先级很是低,并且又惧怕它会占用太多的CPU资源,那么能够在适当的时候调用Thread.yield(),给予其余重要线程更多的工做机会。ide

 

二、volatile优化

volatile解决线程的可见性、有序性。线程

1、可见性htm

共享变量存放在主内存中,假若有两个线程要去使用到这个共享变量,那么这两个线程会将共享变量读取到本身的工做内存中去,假如一个线程修改了共享变量值而没有及时刷新到主内存,另一个线程工做内存中的变量值就不是最新的,当这个线程对变量进行操做时就可能会出现线程安全问题。blog

使用volatile修饰变量时排序

    当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。内存

    当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。资源

2、有序性

重排序,虚拟机在代码运行时会有优化策略,好比int a=1,int b =2,不管虚拟器先读取那个值,都不影响他们最终状态,这时虚拟机有可能进行重排序。

重排序虽然对变量的值没有形成影响,但有可能会出现线程安全问题的。(https://www.cnblogs.com/kubidemanong/p/9505944.html)

相关文章
相关标签/搜索