java - 线程和同步方法

标签 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();

    }
}

doSomething 是同步的。为什么输出是随机的? 我假设同步方法与同步块(synchronized block)相同,但 block 的输出是同步的,而方法不是。

最佳答案

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

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

关于java - 线程和同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8065333/

相关文章:

java - 如何将 Pentaho 数据服务 JDBC 驱动程序安装到我的 java 后端应用程序?

c - 是否有必要调用 pthread_join()

python - 如何从多个线程读取/写入临时文件

c# - 使用 Microsoft Sync Framework 2.1 同步整个数据库

git - 跨计算机同步 git 存储库

java - Java 中的 SSL 握手

java - 与 GWT 应用程序通信的 Android 应用程序

Java 9 : Generating a runtime image with JLink using 3rd party jars

python - 线程被阻塞调用阻塞 - 如何在阻塞调用上设置超时?

swift - 我们如何在 Swift 中实现等待/通知