• java并发之线程间通信


    1、volatile 关键字

    java 支持多个线程同时访问一个对象或对象的成员变量,而每个线程拥有这个变量的拷贝,虽然对象或成员变量分配的内存在共享内存,但每个执行的线程可以拥有一份拷贝,可以提高程序的执行效率,所以多线程看到的变量不一定是最新的。
    

    volatile关键字可以保证程序对变量的每次读取都从共享内存读取,而对它的改变也必须同时刷新到共享内存。从而保证所有线程对变量访问的可见性。

    但是过多的使用volatile关键字,会影响程序的执行效率。所以要谨慎使用

    2、synchronized 关键字

    synchronized可以修饰方法或者代码块,可以确保多个线程同一时刻只有线程处于方法或者同步快中。

    synchronized本质是对对象的监视器(monitor)进行获取,而这个获取过程是排他性的。

    3、 对象上的wait/notify

    在当前线程执行对象的wait和notify方法,当前线程必须获取对象的监视器,如果没有获取对象的监视器,会报java.lang.IllegalMonitorStateException。一般的代码框架为

     synchronized (object){
                try {
                    object.wait();
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
    
      synchronized (object){
                object.notify();
      }
    
    

    执行object.wait()方法时,线程释放object的锁,然后将自己置于object监视器的等待队列;执行object.notify()方法,通知对象等待队列中的一个线程,使该线程由等待队列变为对象的监视器的同步队列,然后该线程尝试去获取object的监视器,获取后线程才能继续执行。

    注意notify方法并没有释放对象的监视器,只是通知对象等待队列中一个对象由等待状态变为同步状态,等 synchronized 代码块执行完后,监视器才会释放

    4、ThreadLocal

    5、join

    6、yield

    7、sleep

    8、intertupt()

  • 相关阅读:
    J2EE之ANT
    lsof在运维中的应用
    Qt编译OpenGL程序遇到的问题
    算法导论第八章__实现计数排序
    MYSQL 更新时间自己主动同步与创建时间默认值共存问题
    微软系统工具套件SysinternalsSuite各个工具功能说明
    【转】如何查看linux版本 如何查看LINUX是多少位
    【转】linux下解压.bz2压缩文件
    【转】db/dbm
    【转】BLE_CC2540_初学者入门指导
  • 原文地址:https://www.cnblogs.com/graph/p/6832727.html
Copyright © 2020-2023  润新知