gpt4 book ai didi

java - 如何锁定公共(public)实用程序类中的各个方法?

转载 作者:行者123 更新时间:2023-11-29 08:16:00 25 4
gpt4 key购买 nike

我写了下面的代码:

public class ClassLevelSynchronization {
public static void main(String[] args) {
new Thread(new AddThread()).start();
new Thread(new MultiplyThread()).start();
}
}

class UtilityCalculator{
private static final Object ADD_LOCK = new Object();
private static final Object MULTIPLY_LOCK = new Object();

public static int add(int op1, int op2){
synchronized (ADD_LOCK) {
return op1+op2;
}
}

public static int multiply(int op1, int op2){
synchronized (MULTIPLY_LOCK) {
return op1*op2;
}
}
}

class AddThread implements Runnable{
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("Addition of: "+i+" + "+(i+1)+" = "+UtilityCalculator.add(i, i+1));
}
}
}

class MultiplyThread implements Runnable{
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("Multiplication of: "+i+" * "+(i+1)+" = "+UtilityCalculator.multiply(i, i+1));
}
}
}

如何确保 AddThreadMultiplyThread 的对象可以为 add(int op1, int op2) 获取锁>multiply(int op1, int op2) 同时分别使用方法而不互相阻塞?

换句话说,我想确保 UtilityCalculator 类的两个方法可以在任何给定时间由两个线程同时使用。我如何实现这一目标?我是否遗漏了代码中的任何内容?

最佳答案

您已经完成了 - 您正在同步不同的对象,所以它应该没问题。您是否出于某种原因怀疑这不起作用?

为了让它更明显正在工作,请在每个同步块(synchronized block)中 hibernate 一秒钟。您的程序仍将在大约 10 秒内执行所有 20 个操作,表明线程没有相互阻塞。

关于java - 如何锁定公共(public)实用程序类中的各个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4825939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com