线程协作
线程通信:生产者和消费者问题
这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。
wait() :表示线程一直等待,直到其他线程通知,与sleep不同,会释放锁。
wait(long timeout):指定等待的毫秒数。
notifg():唤醒一个处于等待状态的线程。
notfigAll():唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先调度。
注意:均是Object类的方法,都只能在同步方法或者同步代码块中使用,否者会抛出异常IIIegalMonitorStateException
解决方式一:生产者将生产好的数据放入缓冲区,消费者从缓冲区拿数据。
解决方式二:并发协作模型“生产者/消费者模式”--》信号灯法
1.管程法
package gaoji;
//测试:生产者消费者模型-->利用缓冲区解决;管程法
public class TestPC {
public static void main(String[] args) {
SynContainer container=new SynContainer();
new Protector(container).start();
new Consumer(container).start();
}
}
//生产者
class Protector extends Thread{
SynContainer container;
public Protector(SynContainer container){
this.container=container;
}
//生产
2.信号灯法
package gaoji;
//测试生产者消费者问题2:信号灯法,标志位解决
public class TestPC2 {
public static void main(String[] args) {
Tv tv =new Tv();
new Player(tv).start();
new Watcher(tv).start();
}
}
//生产者--》演员
class Player extends Thread{
Tv tv;
public Player(Tv tv){
this.tv = tv;
}

浙公网安备 33010602011771号