什么是线程协作?
线程协作指不同线程驱动的任务相互依赖,依赖一般就是对共享资源的依赖;
有线程协作一定会有资源共享,有共享就有竞争,有竞争就会有线程安全问题;但是synchronized与lock只能实现线程同步,并不能实现线程的协作。而实现线程协作,则需要wait()与notify()方法。
wait与notify
- wait():表示线程一直等待,直到其他线程通知,与sleep不同,它会释放锁。
- wait(long timeout):指定等待的毫秒数。
- notify():唤醒一个处于等待状态的线程。
- notifyAll():唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先调度。
实现线程协作的方式?
- A类线程将生产好的数据放入缓冲区,B类线程从缓冲区拿出数据。(管程法)
- 用一个信号标志来确定行为。(信号灯法)