package
/**
* Created by on 2017/10/10.
*/
public class ThreadTest {
public static void main(String[] args) {
final flag flag = new flag();
final AddPrint addPrint = new AddPrint();
Thread A = new Thread(new Runnable() {
@Override
public void run() {
//addPrint.printA();
addPrint.print(flag);
}
});
Thread B = new Thread(new Runnable() {
@Override
public void run() {
//addPrint.printB();
addPrint.print(flag);
}
});
A.start();
B.start();
}
}
class AddPrint {
private static Object o = new Object();//锁
public void print(flag f){
synchronized (o){
for (int i = 1; i < 50; i++) {
if (f.isShouldRun()) {
//shouldRun = false;
f.setShouldRun(false);
o.notify();
if (i < 49) {
try {
System.out.print("A" + i+",");
o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}else {
f.setShouldRun(true);
o.notify();
if (i < 49) {
try {
System.out.print("B" + i+",");
o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
// public void printA() {
//
// synchronized (o){
// for (int i = 1; i < 50; i++) {
// if (shouldRun) {
// shouldRun = false;
// o.notify();
// if (i < 49) {
// try {
// System.out.println("A" + i);
// o.wait();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
//
// }
// }
//
// }
//
// }
//
//
// public void printB(){
//
// synchronized (o){
//
// for (int j= 1; j < 50; j++) {
// if (!shouldRun) {
// shouldRun = true;
// o.notify();
// if (j < 49) {
// try {
// System.out.println("B" + j);
// o.wait();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
//
// }
// }
//
// }
//
//
// }
}
class flag{
volatile boolean shouldRun = true;//标记
public boolean isShouldRun() {
return shouldRun;
}
public void setShouldRun(boolean shouldRun) {
this.shouldRun = shouldRun;
}
}
wait,notify实现两个线程交替打印
最新推荐文章于 2023-10-18 16:40:58 发布