-2

私は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;
    }
}
4

1 に答える 1

0

while ループが反転します。条件はmyTimeCount.getCount() < 5

于 2013-03-09T23:56:24.383 に答える