目录
1 题目分析
- 各个线程依照A、B、C依次进行打印,我们可引用信号量flag来控制每次程序的打印顺序:当flag = 1时,打印线程A;当flag = 2时打印线程B;当flag = 3时,打印线程C。注:判断条件选用while循环,不能选用if判断,我在此处吃了亏~运行结果只是A、B线程循环打印线程名称
- 需要一个计数器count来控制打印的次数,假设每次线程打印将count++,直到打印5次线程名称即可,注意count是从0开始的
- 当不满足信号量的值时,等待;当满足信号量的值时,打印该线程名称,并将其他线程唤醒。注:由于现在存在三个线程,所以唤醒方法需使用notifyAll(),notify()方法会随机唤醒一个线程,容易造成死锁
- 为了使线程打印“按部就班”,我们需要使用一个业务类MyThread,该类通过获得线程名称来匹配相应的打印操作,防止线程进入其他方法
- 在主方法中,通过构造方法将传入线程名称
2 代码实现
class Print{
private int flag = 1;
private int count = 0;
public int getCount() {
return count;
}
public synchronized void