java多线程信号灯法

这段代码演示了一个简单的多线程同步场景,模拟电视播放电影的过程。`Player`线程和`Watcher`线程分别代表演员和观众,他们交替进行播放和观看操作,通过`synchronized`关键字和`wait()`、`notify()`方法实现线程间的协调,确保资源的正确使用。
摘要由CSDN通过智能技术生成
package senior;

public class SignalLamp {
	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) {
		super();
		this.tv = tv;
	}
	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			if (i%2==0) {
				this.tv.play("飞跃疯人院");
			}else {
				this.tv.play("血战钢锯岭");
			}
		}
	}
}
class Watcher extends Thread{
	Tv tv;
	public Watcher(Tv tv) {
		super();
		this.tv = tv;
	}
	@Override
	public void run() {
		for (int i = 0; i < 20; i++) {
			tv.watch();
		}
	}
}
class Tv{
	String voice;
	boolean flag=true;
	
	public synchronized void play(String voice) {
		if (!flag) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println("演员表演了"+voice);
		this.notify();
		this.voice=voice;
		this.flag=!flag;
	}
	public synchronized void watch() {
		// TODO Auto-generated method stub
		if (flag) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println("观看了"+voice);
		this.notify();
		this.voice=voice;
		this.flag=!flag;
	}
	
}

演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭
演员表演了飞跃疯人院
观看了飞跃疯人院
演员表演了血战钢锯岭
观看了血战钢锯岭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值