我有以下代码:
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();
}
}
doSomething 是同步的。为什么输出是随机的? 我假设同步方法与同步块(synchronized block)相同,但 block 的输出是同步的,而方法不是。
最佳答案
那里的synchronized
关键字防止对同一对象 的同步方法调用被交错。它不会阻止对不同 对象的交错方法调用。由于您有三个不同的对象,因此三个调用可以同时运行。
您需要在所有三个线程共享的单个对象上进行同步。
关于java - 线程和同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8065333/