背景:我有三个线程。ThreadA 负责向队列中写入元素,如果队列已满,则通知 ThreadC 从队列中读取元素。ThreadB 是另一个条件,如果队列未满,但时间超过 5 秒,则 Thread 通知 threadC 从队列中取出元素,最后,ThreadC 通知 ThreadB 刷新其时间戳。
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Main {
private Lock lock = new ReentrantLock();
private Condition conA = lock.newCondition();
private Condition conB = lock.newCondition();
private Condition conC = lock.newCondition();
ArrayBlockingQueue<Integer> readQueueA = new ArrayBlockingQueue<>(3);
public static void main(String[] args) {
Main main1 = new Main();
try {
ThreadA threadWrite = main1.new ThreadA();
Thread threadOut = new Thread(threadWrite);
threadOut.start();
ThreadB threadB = main1.new ThreadB();
Thread threadBB = new Thread(threadB);
threadBB.start();
ThreadC threadRead = main1.new ThreadC();
Thread threadIn = new Thread(threadRead);
threadIn.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
但是,输出不是我所期望的,为什么一开始ThreadB outPut TimeOut Zzz?我认为应该不输出这个项目。因为ThreadA唤醒了ThreadC,下一步应该exec ThreadC并且Thread可以在短时间内运行完成而不超过5s.谁能帮我解释或修复它?感谢你!
侃侃无极
相关分类