私はJavaスレッドについてもっと学ぶためにプログラムをコーディングしようとしています。プログラムのロジックは単純で、TimeCountクラスのカウント変数が5に等しい場合、最初のスレッドが実行されます。
これは、従来の待機と通知の質問です。コードのどこにエラーがあるのかわかりませんか?助けてください。
public class TestThread {
public static void sleep(int time) {
try {
Thread.currentThread().sleep(time);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
final MyTimeCount myTimeCount = new MyTimeCount();
final ReentrantLock myLock = new ReentrantLock();
final Condition cvar = myLock.newCondition();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
myLock.lock();
try {
while (myTimeCount.getCount() >= 5) {
cvar.await();
}
System.out.println("--- data is ready, so we can go --- ");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
myLock.unlock();
}
}
});
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
int count = myTimeCount.increase();
if (count == 5) {
cvar.signalAll();
break;
}
sleep(6000);
}
}
});
//-----------
t1.start();
t3.start();
}
}
class MyTimeCount {
int count;
public int increase() {
count++;
System.out.println("time increase count=" + count);
return count;
}
public int decrease() {
count--;
System.out.println("time decrease count=" + count);
return count;
}
public int getCount() {
return count;
}
}