黑马程序员技术交流社区
标题:
线程间通信之交替执行
[打印本页]
作者:
gaojiangjian
时间:
2016-6-26 22:10
标题:
线程间通信之交替执行
//设置2个线程,t1,t2
//设置一个标记,flag=1;执行到t1的时候判断flag==1,成立就执行--操作,修改flag=0并this.notify唤醒其他线程
//不成立就执行wait()方法进入等待状态,执行到t2的时候判断flag是否为0,为0就执行--操作,修改flag=1并this.notify唤醒其他线程
//由于flag初始值为1,所以t1会先执行,然后t1,t2交替执行
作者:
gaojiangjian
时间:
2016-6-26 22:22
package com.itheima;
public class Text24 {
// static int num = 100;
public static void main(String[] args) throws Exception {
final Printer p = new Printer();
new Thread() {
public void run() {
while (true) {
try {
p.print1();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
new Thread() {
public void run() {
while (true) {
try {
p.print2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
static class Printer {
private int flag = 1;
private int num = 1;
public void print1() throws Exception {
while (true) {
synchronized (this) {
Thread.sleep(1000);
if (flag != 1) {
this.wait();
}
// if (num > 100) {
// break;
// }
System.out.println("A线程打印" + num++);
flag = 2;
this.notify();
}
}
}
public void print2() throws Exception {
while (true) {
synchronized (this) {
Thread.sleep(1000);
if (flag != 2) {
this.wait();
}
// if (num > 100) {
// break;
// }
System.out.println("B线程打印" + num++);
flag = 1;
this.notify();
}
}
}
}
}
复制代码
作者:
stilllovingyou
时间:
2016-6-26 23:56
谢谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2