下面是详细讲解“java实现两个线程交替打印的实例代码”的完整攻略和示例说明。
首先,实现两个线程交替打印的基本思路是使用wait()和notify()方法进行线程间的通信,其中wait()方法使线程等待,notify()方法唤醒正在等待的线程。具体实现步骤如下:
-
定义一个对象锁,用于线程间的同步操作。
-
定义两个标志位:flagA和flagB,分别代表两个线程的执行状态。
-
构造两个线程A和B,分别执行flagA和flagB的操作,并在操作完成后调用wait()方法进入等待状态。
-
编写一个线程控制类,用于唤醒等待的线程。在该类中定义一个方法,该方法唤醒正在等待的线程,并交换flagA和flagB的值。
-
在一个无限循环中,交替调用两个线程,并使用sleep()方法控制线程执行的时间间隔。
下面给出两个示例代码,分别使用交替打印数字和字母的方式。
示例1:交替打印数字
public class PrintNumber {
private final Object lock = new Object();
private boolean flagA = true;
private int count = 0;
public static void main(String[] args) {
PrintNumber pn = new PrintNumber();
pn.start();
}
private void start() {
Thread threadA = new Thread(() -> {
while (true) {
synchronized (lock) {
if (!flagA) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + count++);
flagA = false;
lock.notify();
}
}
}, "ThreadA");
Thread threadB = new Thread(() -> {
while (true) {
synchronized (lock) {
if (flagA) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + count++);
flagA = true;
lock.notify();
}
}
}, "ThreadB");
threadA.start();
threadB.start();
}
}
示例2:交替打印字母
public class PrintLetter {
private final Object lock = new Object();
private boolean flagA = true;
public static void main(String[] args) {
PrintLetter pl = new PrintLetter();
pl.start();
}
private void start() {
Thread threadA = new Thread(() -> {
char c = 'A';
while (c <= 'Z') {
synchronized (lock) {
if (!flagA) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + c++);
flagA = false;
lock.notify();
}
}
}, "ThreadA");
Thread threadB = new Thread(() -> {
char c = 'a';
while (c <= 'z') {
synchronized (lock) {
if (flagA) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + c++);
flagA = true;
lock.notify();
}
}
}, "ThreadB");
threadA.start();
threadB.start();
}
}
以上就是“java实现两个线程交替打印的实例代码”的攻略和示例说明,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现两个线程交替打印的实例代码 - Python技术站