2016-03-15 57 views
0

我剛開始學習線程,我正在嘗試使用多線程。我不知道爲什麼method1()被調用兩次。任何幫助表示讚賞。謝謝!關於多線程 - 方法被調用兩次

我已經盡我所能來讓這個例子簡單/清除去除很多東西

class A implements Runnable { 

    public void method1() { 
    System.out.println("Method1"); 
    } 

    public void methodThread(int numberOfThreads) { 
     List<Thread> threads = new ArrayList<Thread>(); 
     for(int i=0; i<numberOfThreads; i++) { 
     Thread t = new Thread(this, "Thread - " +i); 
     t.start(); 
     } 

     for(int i=0; i<numberOfThreads; i++) { 
     threads.get(i).join(); 
     } 
    } 

    @Override 
    public void run() { 
     System.out.print(Thread.currentThread().getName() + this.method1()); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     a.methodThread(1); 
    } 
} 

Expected output: 
Thread - 0 Method1 

Actual output 
Method1 // Called again?? 
Thread - 0 Method1 
+1

這不會編譯 - 方法'method1'或'methodThread'沒有返回類型。 – rgettman

+0

在method1()中添加一個斷點並檢查該調用堆棧。 – RhinoDevel

+0

我只是想把sudo代碼:/ – user1799214

回答

2

你的方法,方法一()做實際的輸出,並且該值從運行印刷之前發生這種情況方法。但是,那麼它看起來像你想添加的返回值(也許在你的代碼是「方法1」)的線程的名字:

System.out.print(Thread.currentThread().getName() + this.method1()); 

這將導致你所看到的行爲。

+0

我再次打印這些值。謝謝 – user1799214