2013-10-30 79 views
8

我有下面的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; 
    } 
} 
+1

你想看看當多個線程砰的一發生什麼事單一方法?? –

回答

10

您的所有線程都可以在不影響同一時間的情況下調用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,它具有外部號碼,因爲外線號碼是accessable所有。如果另一個線程進入該方法,它將擁有自己的數字(因爲它調用了它自己的方法版本),但它將使用相同的外部數字,因爲該數字是全局的並且對所有數據都是可訪問的。

在這種情況下,您需要添加特殊代碼以確保您的線程正常工作。

+0

可以請你拿出幫助把握的例子.. !!提前致謝。 –

2

你能想到這個時候不同的線程調用CollectionTest的靜態方法 添加

會發生那麼什麼: 爲〔實施例:

public class Test { 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
    Runnable t1 = new Runnable() { 
     public void run() { 
      CollectionTest.add(1, 2); 
     } 
    }; 

    Runnable t2 = new Runnable() { 
     public void run() { 
      CollectionTest.add(3, 4); 

     } 
    }; 


    new Thread(t1).start(); 
    new Thread(t2).start(); 

} 
} 


public static int add(int number, int num){ 
    // when different thread call method 
    // for example 
    // Runnable t1 call ,then "number" will be assigned 1, "num" will be assigned 2 
    // number ,num will keep in thread'stack spack 
    return number + num; 
} 
相關問題