0

こんにちは、プログラムで複数のスレッドを実行しています。各スレッドには 6 つの要素の配列が含まれています。スレッドの実行メソッドに同期を追加しましたが、配列を 1 から 6 まで順番に表示するという点で同期されるのは最初のスレッドだけです。

/* My run method for the thread */
public synchronized void run(){
    int from = St7.stt[acnt].getCf();
    int to = St7.stt[acnt].getCt();
    int inc = St7.stt[acnt].getCi();
    threadsRunning++; // We now have more threads 
    this.threadId = threadsRunning;
    active = true;
    try{
        int loop = from;
        while (active && loop <= to){

            System.out.println(text + " Counter: " + St7.stt[acnt].getCounter() + ".");
            System.out.println();
            Thread.sleep(sleep);
            loop=loop+inc;
        }
4

2 に答える 2

1

私が理解している限りでは、スレッドの結果がディスパッチされたのと同じ順序で表示されることを望んでいます。それが正しければ、おそらくCallableインターフェイスが役立ちます。複数のスレッドで実行できますが、それぞれの戻り値を取得することもできます。それらを実行した順序でスレッドします(ここを確認してください)。

于 2013-03-23T23:20:48.037 に答える
0

質問を理解できるかどうかはわかりません。変数の名前付けが不十分な場合は役に立ちませんが、StudentThreadクラスのNインスタンスを作成しているようです。これらはすべて、run()メソッドが同期されています。

複数のスレッドがすべて別々のオブジェクトで同期されているため、複数のスレッドが同時にrunメソッドを呼び出すことを妨げることはありません。相互排除を行うには、すべてのスレッドが一意のオブジェクトで同期する必要があります。このオブジェクトは、同時アクセスから保護する必要がある共有状態をカプセル化する必要があります。

于 2013-03-23T23:09:35.690 に答える