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是同步的.为什么输出是随机的?我假设同步方法与同步块相同但块的输出是同步的,而方法则不是.
synchronized那里的关键字阻止对同一对象的同步方法调用进行交错.它不会阻止对不同对象的交错方法调用.由于您有三个不同的对象,因此三个调用可以同时运行.
您需要在由所有三个线程共享的单个对象上进行同步.