多线程之间的通信

  • 方法1:通过访问共享变量的方式(注:需要处理同步问题)

  • 方法2:通过管道流

两个线程间共享数据

  • 通过共享对象(用wait和notify方法)

  • 使用像阻塞队列这样并发的数据结构

notifynotifyAll的区别

  • notify()方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有用武之地

  • notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程能继续运行

为什么wait, notify 和 notifyAll这些方法不在thread类里面?

  • 由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁属于对象

  • JAVA提供的锁是对象级的而不是线程级的