wait,notify实现两个线程交替打印
Posted tanyunlong_nice
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wait,notify实现两个线程交替打印相关的知识,希望对你有一定的参考价值。
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实现两个线程交替打印的主要内容,如果未能解决你的问题,请参考以下文章
java多线程:结合多线程交替打印10次abc实例,对wait/notify使用的彻底理解