java中多个线程顺序打印字符10次
public class App
{
/**
* wait、notify、notifyAll多个线程监控锁状态,释放锁后多个线程抢锁,为确保多个线程按指定顺序执行
* 采用a/b/c变量控制,即便是抢到了锁控制变量不对还是会释放锁一直等到指定对象抢到锁为止
*/
public static boolean a = true,b = false,c=false;
public static Object object = new Object();
public static void main( String[] args ) {
Thread thread1 = new Thread(){
@Override
public void run() {
int i =0;
synchronized (object){
while (i<10){
if(a){
System.out.println(Thread.currentThread().getName()+"AAA");
i++;
a=false;
b=true;
c=false;
object.notifyAll();
}
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
Thread thread2 = new Thread(){
@Override
public void run() {
int i =0;
synchronized (object){
while (i<10){
if(b){
System.out.println(Thread.currentThread().getName()+"BBB");
i++;
a=false;
b=false;
c=true;
object.notifyAll();
}
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
Thread thread3 = new Thread(){
@Override
public void run() {
int i =0;
synchronized (object){
while (i<10){
if(c){
System.out.println(Thread.currentThread().getName()+"CCC");
i++;
c=false;
b=false;
a=true;
object.notifyAll();
}
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
thread1.start();
thread2.start();
thread3.start();
}
}
结果满足条件,多次运行依然满足条件