題目
寫兩個線程,一個線程打印1-52,另一個線程打印A-Z,打印順序為12A34B56C......5152Z。要求用線程間的通信。
注:分別給倆個對象構造一個對象O,數字每打印兩個或字母每打印一個就執行O.wait().
代碼實現
package 第16章多線程.chapter16_09_ThreadLocal;
public class TestThread1 {
public static void main(String[] args) {
Object object = new Object();
new Thread1(object).start();
new Thread2(object).start();
}
}
// 數字打印線程
class Thread1 extends Thread {
private Object obj;
public Thread1(Object obj) {
this.obj = obj;
}
public void run() {
synchronized (obj) {
for (int i = 1; i <= 52; i++) {
System.out.print(i);
if (i % 2 == 0) {
obj.notifyAll();
//打印到能被 2 整除就等待
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
// 字母打印線程
class Thread2 extends Thread {
private Object obj;
public Thread2(Object obj) {
this.obj = obj;
}
public void run() {
synchronized (obj) {
for (int i = 0; i < 26; i++) {
System.out.print((char) ('A' + i));
//打印一個字母就喚醒其他所有線程
obj.notifyAll();
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}