所以我想要实现的是两个线程轮流执行他们的任务。我最初只有一个问题;
- 如何在不使用锁的情况下实现两个线程轮流执行任务?我不想要锁的原因是因为我感觉很愚蠢,当两个线程试图访问没有公共资源时使用锁。
所以我打算做一个代码的小例子,然后我发现我无法让它工作,即使有锁。所以我的第二个问题是;如何使代码按预期工作?我看到它的方式,它应该工作,但这只是我:)
- Thread1 打印消息
- Thread1 表示 Thread2 可以打印消息
- Thread2 打印消息
- Thread2 表示 Thread1 可以重新开始
public class App {
Lock lock = new ReentrantLock();
Condition cond1 = lock.newCondition();
Condition cond2 = lock.newCondition();
public App() {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
lock.lock();
System.out.println("Thread 1");
cond2.signalAll();
cond1.await();
lock.unlock();
}
} catch (InterruptedException e) {
}
}
});
thread1.start();
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
lock.lock();
cond2.await();
System.out.println(" Thread 2");
cond1.signalAll();
lock.unlock();
}
} catch (InterruptedException e) {
}
}
});
thread2.start();
}
public static void main(String[] args) {
new App();
}
}