1. 写两个线程,其中一个线程打印1 ~ 52,另一个线程打印A ~ Z,打印顺序应该是12A34B56C ... 5152Z,完成代码实现。
(1) 打印数字线程源码
package com.threadtest.code;
public class PrintNumThread implements Runnable {
private PrintSequence printSequence;
public PrintNumThread(PrintSequence printSequence) {
this.printSequence = printSequence;
}
@Override
public void run() {
int i = 0;
while(true) {
synchronized (printSequence) {
if(i == 52) {
break;
}
if(!printSequence.isNum()) {
System.out.print(++i);
if(i % 2 == 0) {
printSequence.setNum(true);
printSequence.notify();
}
} else {
try {
printSequence.wait();
} catch (InterruptedException e) {
}
}
}
}
}
}
(2) 打印字母源码
package com.threadtest.code;
public class PrintAlbumThread implements Runnable {
private PrintSequence printSequence;
public PrintAlbumThread(PrintSequence printSequence) {
this.printSequence = printSequence;
}
@Override
public void run() {
char[] arr = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int i = 0;
while (true) {
if(i == 26) {
break;
}
synchronized (printSequence) {
if(printSequence.isNum()) {
System.out.print(arr[i]);
i++;
printSequence.setNum(false);
printSequence.notify();
} else {
try {
printSequence.wait();
} catch (InterruptedException e) {
}
}
}
}
}
}
(3) 共享资源源码
package com.threadtest.code;
public class PrintSequence {
private boolean isNum = false;
public boolean isNum() {
return isNum;
}
public void setNum(boolean num) {
isNum = num;
}
}
(4) 测试执行源码
package com.threadtest.code;
public class PrintTest {
public static void main(String[] args) {
PrintSequence printSequence = new PrintSequence();
PrintAlbumThread printAlbumThread = new PrintAlbumThread(printSequence);
PrintNumThread printNumThread = new PrintNumThread(printSequence);
new Thread(printAlbumThread).start();
new Thread(printNumThread).start();
}
}
网友评论