多线程按序交替打印
三个线程,ID分别为A,B,C,每个线程将自己的ID打印10遍,要求输出的结果按顺序显示。
如ABCABCABCABCABC…
线程是无法控制的,java中线程是抢占式的,谁先抢到资源谁先操作。所以,要在资源类中加一个flag变量,来规定当前是要哪个线程来操作。如flag = 0 对应 A线程来操作, flag = 1 来对应 B线程来操作, flag = 2 来对应 C线程来操作。 如果当前flag与线程不匹配,则把线程挂起,即wait()。然后通过线程间的通信来唤醒挂起的线程。可以使用notify()。 如果想更精确的控制唤醒的线程,可以使用condition。lock对象支持多个等待队列,来控制不同的线程。
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Demo02 {
public static void main(String[] args) {
Print print = new Print();
new Thread(() -> {
for (int i = 0; i < 10; i++) {
print.printA();
}
}, "A").start(