明确任务:两个线程A和B,任务都是打印当前时间,要求编码实现:线程A和B同时启动后,以先A后B的方式任务交叉执行10次。
对于这道题,首先,我们应该明确两个线程交互执行的含义:线程A和线程B共享一个处理机资源,线程A首先获得处理机,线程B处于就绪状态,线程A执行一次后,线程B获得处理机资源,线程A处于就绪状态,依次循环,直到线程A和线程B执行结束。
解题思路:设置共享资源Object o = new Object(),设置互斥信号量boolean flag = true,进行线程同步,线程A执行一次后,唤醒线程B,线程A处于等待状态,线程B执行后亦是如此,如此循环往复,实现了线程A和线程B交互执行10次。
代码如下:
import java.util.Date;
public class ThreadEx {
private Object o = new Object(); // 共享资源
private boolean flag = true; // 互斥信号量
class Thread1 extends Thread {
public void run() {
synchronized (o) { // 线程同步
for (int i = 1; i <= 10; i++) {
System.out.println("New thread-->A:" + new Date());
o.notify(); // 唤醒另外一个进程
if(flag)