线程和同步方法

mar*_*ary 2 java multithreading synchronization

我有以下代码:

public class MyThread extends Thread {
    private int i;
    public static int sum=0;
    public MyThread(int k){
      i=k;
    }




    public static void main(String[] args) throws InterruptedException{

       Thread t=new MyThread(1);
       Thread s=new MyThread(2);
       Thread p=new MyThread(3);
       t.start();
       s.start();       
    }


public synchronized void doSomething(){
    for(int i=0; i<100000; i++){
        System.out.println(this.i);
    }

}

    @Override
    public void run() {
        doSomething();

    }
}
Run Code Online (Sandbox Code Playgroud)

doSomething是同步的.为什么输出是随机的?我假设同步方法与同步块相同但块的输出是同步的,而方法则不是.

Mar*_*ers 9

synchronized那里的关键字阻止对同一对象的同步方法调用进行交错.它不会阻止对不同对象的交错方法调用.由于您有三个不同的对象,因此三个调用可以同时运行.

您需要在由所有三个线程共享的单个对象上进行同步.