2013-03-17 28 views
0

我有2個職位我想在JAVA中執行。我有:2個線程執行2個類似職位

public static void main(String[] args) 
{ 
    takeInfofromDB(); 
    doSomeLongCalculationsWithThatData(); 

    takeInfofromDB2(); 
    doSomeLongCalculationsWithThatData2(); 

    GenerateAnswerFromBothAnswers(); 
} 

是否有可能以某種方式把takeInfofromDB();doSomeLongCalculationsWithThatData();在2個線程?至少有一個仍在工作時,GenerateAnswerFromBothAnswers();無法執行?

+2

是的,它是可能的。 – 2013-03-17 18:12:18

+0

當然這是可能的。你有什麼嘗試? – 2013-03-17 18:20:28

+0

@JBNizet我試着創建2個獨立的類,但我不想要2個單獨的類。此外,無法獲得'GenerateAnswerFromBothAnswers();'僅在2個線程完成時才能工作 – lily 2013-03-17 18:40:19

回答

0

就像這個...

public static void main(String[] args) 
{ 
    Thread t1 = new Thread(new Runnable() { 
     public void run() { 
      takeInfofromDB(); 
      doSomeLongCalculationsWithThatData(); 
     }}); 

    Thread t2 = new Thread(new Runnable() { 
     public void run() { 
     takeInfofromDB2(); 
     doSomeLongCalculationsWithThatData2(); 
     }}); 

    t1.start(); 
    t2.start(); 

    t1.join(); 
    t2.join(); 

    GenerateAnswerFromBothAnswers(); 
} 
0

對於一個非常簡單的輕量級方法,請嘗試下面的代碼。然而,你可能想了解更多有關線程,並最終執行者:http://docs.oracle.com/javase/tutorial/essential/concurrency/

Thread thread1 = new Thread() { 
    private Object result; 

    @Override 
    public void run() { 
     takeInfofromDB(); 
     result = doSomeLongCalculationsWithThatData(); 
    } 

    public Object getResult() { 
     return result; 
    } 
} 

Thread thread2 = new Thread() { 
    private Object result; 

    @Override 
    public void run() { 
     takeInfofromDB2(); 
     result = doSomeLongCalculationsWithThatData2(); 
    } 

    public Object getResult() { 
     return result; 
    } 
} 

thread1.start(); 
thread2.start(); 
thread1.join(); 
thread2.join(); 

Object result1 = thread1.getResult(); 
Object result2 = thread2.getResult(); 

GenerateAnswerFromBothAnswers(result1, result2); 

的是你不應該運行這段代碼(我沒有測試它,如果你join之前調用getResult可能發生奇怪的事情) ,但它應該成爲如何以基本方式使用線程的起點。