題目
寫(xiě)兩個(gè)線(xiàn)程牌借,一個(gè)線(xiàn)程打印1-52,另一個(gè)線(xiàn)程打印A-Z割按,打印順序?yàn)?2A34B56C......5152Z膨报。要求用線(xiàn)程間的通信。
注:分別給倆個(gè)對(duì)象構(gòu)造一個(gè)對(duì)象O适荣,數(shù)字每打印兩個(gè)或字母每打印一個(gè)就執(zhí)行O.wait().
代碼實(shí)現(xiàn)
package 第16章多線(xiàn)程.chapter16_09_ThreadLocal;
public class TestThread1 {
public static void main(String[] args) {
Object object = new Object();
new Thread1(object).start();
new Thread2(object).start();
}
}
// 數(shù)字打印線(xiàn)程
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();
}
}
}
}
}
}
// 字母打印線(xiàn)程
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));
//打印一個(gè)字母就喚醒其他所有線(xiàn)程
obj.notifyAll();
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}