不同的线程同时调用该方法

时间:2013-10-30 04:49:39

标签: java multithreading performance

我有下面的java程序添加两个数字..但我试图通过线程开发..我看起来在开始时应该有五个不同的线程 命名为T1,T2,T3,T4,T5并且所有五个线程都应该同时调用add方法,请告诉我如何实现这一点,即所有五个线程应该同时调用add方法,以便性能可以改善..

有人可以建议我如何通过执行程序框架或contdown latch

来实现这一点
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;
    }
} 

2 个答案:

答案 0 :(得分:14)

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

这是因为在方法内部,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,并且它有外部号码,因为外部号码可以访问所有号码。如果另一个线程进入该方法,它将拥有自己的num(因为它调用了自己的方法版本)但是它将使用相同的外部数字,因为该数字是全局的并且可以访问所有。

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

答案 1 :(得分:3)

你可以这么想 当不同的线程调用Collection Test'静态方法add

时 然后会发生什么: 例如: