だから私が達成したいのは、2つのスレッドが順番にタスクを実行することです。当初、私が持っていた質問は 1 つだけでした。
- ロックを使用せずにタスクを順番に実行する 2 つのスレッドを実現するにはどうすればよいですか? ロックが必要ない理由は、2 つのスレッドがアクセスしようとしている共通のリソースがない場合にロックを使用するのは愚かだと感じているからです。
だから私はコードの小さな例を作るつもりでしたが、ロックを使ってもそれを機能させることができないことに気付きました。私の 2 番目の質問は次のとおりです。コードを期待どおりに動作させるにはどうすればよいですか? 私の見方では、うまくいくはずですが、それは私だけです:)
- Thread1 はメッセージを出力します
- スレッド 1 は、スレッド 2 がメッセージを出力できることを通知します
- 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();
}
}