2

次のコードでは、スレッド名とオブジェクトのハッシュ コード値を出力しようとしていvectorますが、出力は期待どおりではありません。また、オブジェクトのハッシュ コード値が一貫していないため、シングルトンは壊れていvectorます。

public class ThreadTestVector implements Runnable {

private static Vector<String> vector;

public static synchronized Vector<String> getInstance() {
    if (vector == null) {
        vector = new Vector<String>();
    }
    return vector;
}

@Override
public synchronized void run() {

    Vector<String> vector = getInstance();

    for (int i = 0; i < 10; i++) {
        vector.add(Thread.currentThread().getName());
    }
    for (int i = 0; i < vector.size(); i++) {
        System.out.println(vector.get(i) + " Hash Code "
                + vector.hashCode());
    }
    // clear the vector for values already printed
    vector.clear();
}

public static void main(String[] args) throws Exception {
    Runnable r = new ThreadTestVector();
    Runnable r1 = new ThreadTestVector();
    Runnable r2 = new ThreadTestVector();
    Runnable r3 = new ThreadTestVector();
    Thread t1 = new Thread(r);
    Thread t2 = new Thread(r1);
    Thread t3 = new Thread(r2);
    Thread t4 = new Thread(r3);
    t1.start();
    // Thread.sleep(100);
    t2.start();
    // Thread.sleep(100);
    t3.start();
    // Thread.sleep(100);
    t4.start();

}

}

実行時に次の出力パターンが生成されます
Thread-0 ハッシュ コード 924221025
Thread
-
0 ハッシュ コード 1030242113 Thread-0 ハッシュ コード 1030242113 スレッド 0 ハッシュ コード 1030242113 スレッド 0 ハッシュ コード 1030242113 スレッド 0 ハッシュ コード 1030242113 スレッド 0 ハッシュ コード 1030242113 スレッド 0 ハッシュ コード 1030242113 スレッド 0 ハッシュ コード 1030242113 1 ハッシュ コード 1030242113 スレッド 1 ハッシュ コード 1030242113 スレッド 1 ハッシュ コード 1030242113














スレッド 1 ハッシュ コード 1030242113
スレッド 1 ハッシュ コード 1030242113
スレッド 1 ハッシュ コード 1030242113
スレッド 1 ハッシュ コード 1030242113
スレッド 1 ハッシュ コード 1030242113 スレッド
1 ハッシュ コード 1030242113 2 ハッシュ コード 1030242113 スレッド 2 ハッシュ コード 1030242113 スレッド 2 ハッシュ コード 1030242113 スレッド 2 ハッシュ コード 1030242113スレッド 2 ハッシュ コード 1030242113 スレッド 2 ハッシュ コード 1030242113コード 1030242113 スレッド 3 ハッシュ コード 1030242113 スレッド 3 ハッシュ コード 1030242113 スレッド 3 ハッシュ コード 1030242113














スレッド 3 ハッシュ コード 1030242113
スレッド 3 ハッシュ コード 1030242113
スレッド 3 ハッシュ コード 1030242113
スレッド 3 ハッシュ コード 1030242113
スレッド 3 ハッシュ コード 1030242113 スレッド
3 ハッシュ コード 1030242113 0 ハッシュコード 1030242113



これはすべてごちゃ混ぜで、ハッシュコードの値も異なります。

出力が同期された方法で印刷され、ハッシュコード値が一貫するように修正するにはどうすればよいですか?

4

2 に答える 2