1

ここに私のクラスがあります

public class ThreadTest {
    public static void main(String[] args) {

        ThreadTest threadTest = new ThreadTest();
        threadTest.m1();
        synchronized (threadTest) {
            threadTest.m2();
        }
        System.out.println("End of main thread");
    }

    public void m1() {
        Thread myThread = new Thread(new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println(Thread.currentThread().getName() + " : " + i);
                }
                System.out.println("end of mythread");
            }
        });
        myThread.start();
    }

    public void m2() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " : " + i);
        }
    }

}

コードをsynchronizedブロック内に配置しましたが、正しく動作していないようで、両方のforループが並行して実行されます。同期ブロックを使用してマルチスレッド環境でこれらのループをスレッドセーフとして実行するにはどうすればよいですか。指定されたコードの間違いはどこにありますか?

ありがとう!

4

1 に答える 1

4

同期ブロックは、他のスレッドが同じオブジェクトの同じまたは別の同期ブロックに入ることを防ぎます。ここには 1 つの同期ブロックがあり、そこには 1 つのスレッドだけが入ります。したがって、他のすべてのスレッドは、必要に応じて実行できます。

于 2013-07-21T11:54:08.843 に答える