线程随记

线程之间的通信

  1. 线程之间可以通过某一变量共享来互相通信,利用wait/notify/notifyAll/join等方法来实现

    wait(): 当前线程进入等待队列,并释放锁,等待其他线程唤醒(前提必须拥有锁);
    notify(): 随机唤醒某一个等待线程;
    notifyAll():唤醒所有的等待线程
    join():使得主线程等待,知道子线程执行完毕,如A.join()主线程为main等待,直到A线程执行完毕再继续执行下去
    
  2. 通过共享内存(利用队列实现生产者和消费者的模式来进行通信)

常见的问题

  1. join和synchronized的区别

    join的内部实现是利用wait()方法进行等待;
    synchronized关键字通过monitorenter和monitorexit来进行同步
    
  2. join和sleep的区别

    join的内部实现是利用wait()方法进行等待,等待的同时也会释放对资源的锁定
    sleep只是让线程进入睡眠状态,对于资源的占有不会释放,只会释放CPU资源
    
posted @ 2019-09-27 16:31  荷塘月色0519  阅读(82)  评论(0编辑  收藏  举报