java - 不同线程同时调用方法

标签 java multithreading performance

我有下面的 java 程序来添加两个数字..但我试图通过线程进行开发..我在看一开始应该有五个不同的线程 命名为T1,T2,T3,T4,T5 五个线程应该同时调用add方法,请指教如何实现这个五个线程应该同时调用add方法,这样性能可以改进..

有人可以告诉我如何通过执行器框架或 contdown 闩锁实现这一点吗

public class CollectionTest {

    public static void main(String args[]) {

        //create Scanner instance to get input from User
        Scanner scanner = new Scanner(System.in);

        System.err.println("Please enter first number to add : ");
        int number = scanner.nextInt();

        System.out.println("Enter second number to add :");
        int num = scanner.nextInt();

        //adding two numbers in Java by calling method
       int result = add(number, num);

       System.out.printf(" Addition of numbers %d and %d is %d %n", number, num, result);
    }

    public static int add(int number, int num){
        return number + num;
    }
} 

最佳答案

您的所有线程都可以同时调用 add 而不会产生任何后果。

这是因为在该方法内部,number 和 num 变量仅对该方法是局部的——对于调用者线程也是如此。如果 number 和/或 num 是全局的,那就是另一回事了。

编辑:

例如,在这种情况下:

public static int add(int number, int num){
    //A
    return number + num;
}

当线程到达点 A 时,它有两个传入的数字。

当一个不同的线程到达点 A 时,它使用传入的不同数字调用了自己的方法版本。这意味着它们对第一个线程正在执行的操作没有影响。

这些数字仅适用于方法。

在这种情况下:

static int number;

public static int add(int num){
    //A
    return number + num;
}

当一个线程到达A点时,它有传入的num,它有外部编号,因为外部编号是所有人都可以访问的。如果另一个线程进入该方法,它将拥有自己的编号(因为它调用了自己的方法版本),但它将使用相同的外部编号,因为该编号是全局的并且所有人都可以访问。

在这种情况下,您需要添加特殊代码以确保您的线程正确运行。

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

相关文章:

angular - 多个路由指向同一个 Angular 组件是否会影响性能?

java - Android:三星 S2 上的 GLES 2.0 损坏?

第二次 java.lang.InstantiationException

c++ - Qt 中多线程的 Worker 类

windows - Chrome 任务管理器信息与 Chrome 进程的 Windows 任务管理器信息不一致的原因是什么?

algorithm - 从 POP3 服务器高效地获取未检索到的消息 ID

php - 如何让 Symfony 更快

java - 坚持使用 boolean 值总是返回 TRUE

java - 在 Java 中使用 Joda-Time DateTime 添加一个月到日期失败

objective-c - 多线程崩溃中的 sizeWithFont!