美文网首页
Java之多线程和并发

Java之多线程和并发

作者: zhglance | 来源:发表于2020-02-10 15:18 被阅读0次

    1.volatile变量

    1.1 可见性

    volatile修饰符保证volatile变量对所有线程可见,当一个线程修改了volatile变量值之后,其他线程可以立即可见。

    主要原理:

    a.修改volatile变量,会强制将修改后的值刷新到系统主内存中;
    b.修改volatile变量,会导致其他线程工作内存中对应的volatile变量值失效。其他线程再读取该volatile变量值的时候,需要重新从读取主内存中的volatile值。

    1.2 有序性

    volatile变量的有序性,禁止了JVM的重新排序优化,即线程内表现为串行语义。这一点可普通变量不同,普通变量可能因为因为JVM执行的优化,变量的赋值操作可能和程序中的执行顺序不一致。

    1.3 非原子性

    volatile变量提供了可见性和有序性,但是并不保证原子性。

    2.sleep和 wait 方法区别

    相同:两者都可以暂停线程;
    不同之处:sleep()没有释放锁,线程会自动苏醒,而 wait()释放了锁,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法,通常用于线程间交互/通信 。

    相关文章

      网友评论

          本文标题:Java之多线程和并发

          本文链接:https://www.haomeiwen.com/subject/pwvaxhtx.html