需求:一个线程A打印 1 后,另一个线程B打印 a ;接着线程A打印 2 后,线程B打印 b .........................
题解:我会用一个标记变量 index,当index为奇数时,打印数字,线程A工作;
当index为偶数时,打印字母,线程B工作;
public class Main {
static Object obj = new Object();
static int index = 0;
public static void main(String[] args) {
// 线程一
new Thread(()->{
for(int i=0;i<15;i++){
synchronized(obj){
while(index%2==1)
try {
obj.wait();
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"线程打印 : "+(i+1));
index++;
obj.notifyAll();
}
}
},"AAA").start();
// 线程二
new Thread(()->{
for(int i=0;i<15;i++){
synchronized(obj){
while(index%2==0)
try {
obj.wait();
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"线程打印 : "+(char)(i+'a'));
index++;
obj.notifyAll();
}
}
},"BBB").start();
}
}
// 控制台结果输出
AAA线程打印 : 1
BBB线程打印 : a
AAA线程打印 : 2
BBB线程打印 : b
AAA线程打印 : 3
BBB线程打印 : c
AAA线程打印 : 4
BBB线程打印 : d
AAA线程打印 : 5
BBB线程打印 : e
AAA线程打印 : 6
BBB线程打印 : f
AAA线程打印 : 7
BBB线程打印 : g
AAA线程打印 : 8
BBB线程打印 : h
AAA线程打印 : 9
BBB线程打印 : i
AAA线程打印 : 10
BBB线程打印 : j
AAA线程打印 : 11
BBB线程打印 : k
AAA线程打印 : 12
BBB线程打印 : l
AAA线程打印 : 13
BBB线程打印 : m
AAA线程打印 : 14
BBB线程打印 : n
AAA线程打印 : 15
BBB线程打印 : o