写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z打印顺序为12A34B56C……5152Z(2个数字 1个字母)。
用线程的创建方式和线程池
public class Test02 {
Object obj = new Object();
//写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z
//打印顺序为12A34B56C……51Y52Z(2个数字 1个字母)。
//创建线程池对象
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(new Runnable() {
@Override
public void run() {
//负责打印1-52
synchronized(obj){
for (int i = 1; i <= 52; i++) {
System.out.print(i+"\t");
//当i为2的倍数的时候线程进入等待
if (i % 2 == 0){
try {
//通知另外一个线程执行
obj.notify();
//线程等待
obj.wait();
} catch (InterruptedException e)
e.printStackTrace();
}
}
}
}
}
});
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
es.submit(new Runnable() {
@Override
public void run() {
synchronized (obj){
for (char i = 'A'; i <= 'Z'; i++) {
System.out.print(i+"\t");
try {
//通知另外一个线程执行
obj.notify();
//当输出到Z时不等待,方便后面关闭线程池
if (i != 'Z'){
//线程等待
obj.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
es.shutdown();
}
执行结果:
1 2 A 3 4 B 5 6 C 7 8 D 9 10 E 11 12 F 13 14 G 15 16 H 17 18 I 19 20 J 21 22 K 23 24 L 25 26 M 27 28 N 29 30 O 31 32 P 33 34 Q 35 36 R 37 38 S 39 40 T 41 42 U 43 44 V 45 46 W 47 48 X 49 50 Y 51 52 Z