线程之间的通信
线程之间可以通过某一变量共享来互相通信,利用wait/notify/notifyAll/join等方法来实现
wait(): 当前线程进入等待队列,并释放锁,等待其他线程唤醒(前提必须拥有锁); notify(): 随机唤醒某一个等待线程; notifyAll():唤醒所有的等待线程 join():使得主线程等待,知道子线程执行完毕,如A.join()主线程为main等待,直到A线程执行完毕再继续执行下去
通过共享内存(利用队列实现生产者和消费者的模式来进行通信)
常见的问题
join和synchronized的区别
join的内部实现是利用wait()方法进行等待; synchronized关键字通过monitorenter和monitorexit来进行同步
join和sleep的区别
join的内部实现是利用wait()方法进行等待,等待的同时也会释放对资源的锁定 sleep只是让线程进入睡眠状态,对于资源的占有不会释放,只会释放CPU资源