java - 多线程 - 同步对象的所有实例的 block

标签 java multithreading

我有一个计算类。我创建了两个线程,它们都在此类的不同实例上工作,并尝试获取 i 的值。但两者都给了我相同的值(value)观。

我希望如果一个实例的一个线程正在工作,那么在其他实例上工作的线程应该等待。

public class Calculate {
    private int i=2;
    public  void showNumber(){
        synchronized(Calculate.class){
            i=i+2;
        }
        System.out.println(Thread.currentThread()+"Value of i is "+i);
    }
}

class Test1 implements Runnable{
    Calculate c=null;
    public Test1(Calculate c){
        this.c=c;
    }
    @Override
    public void run() {
        System.out.println(Thread.currentThread()+" Running");
        c.showNumber();
    }

}
public class ThreadingPractise {
    public static void main(String[] args) {
        Calculate c=new Calculate();
        Calculate c1=new Calculate();
        Thread t1=new Thread(new Test1(c),"t1");
        Thread t2=new Thread(new Test1(c1),"t2");
        t1.start();
        t2.start();
    }
}

最佳答案

使 i 为静态。如果你想在线程之间共享变量。并同步 showNumber 方法而不是Calculate.class,以便一次只有 1 个线程运行它。

关于java - 多线程 - 同步对象的所有实例的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22745989/

相关文章:

java - Linux系统中java命令的翻译

java - 每个线程上有多个任务的执行器服务

java - setImageResource() 问题 - 如何实现文件路径?

java - Android Preference for API 低于和高于 3.0

linux - 为什么线程只以大间隔同步?

c - 基准测试、顺序 x 并行程序。亚线性加速?

java - 有没有办法设置两个或多个事件派发线程(EDT)?

C#在不同的线程中接收键盘钩子(Hook)回调

java - 当 Java 计算一个连词 (<boolean exp1> && <boolean exp2>) 时,如果 exp1 为假,它会计算 exp2 吗?

java - 在 Java 8 中将日期转换为 EST