2014-01-12 187 views
0

我怎麼能從線程外部調用線程內的方法。在某些情況下,b()將會從()中調用,但在某些情況下,我想指示線程從線程外部轉到b()。我假設我可以使用觀察者模式來解決這個問題,但是我已經在這個線程上使用了觀察者模式來做別的事情,除非可以使用觀察者模式兩次。發信號通知線程

Thread t = new Thread(new clientThread()); 
t.start(); 

boolean someBool = false; 
class clientThread implements Runnable{ 
    run(){ 
     a(); 
    } 
    public void a(){ 
     while(!someBool){ 
      Object ob = in.readObject(); 
      b(); 
      //do stuff 
    } 
    public void b() { 
      while(true){ 
       Object ob = in.readObject();  
       //do stuff 
      } 
    } 
} 

t.b(); 
+1

您需要某種方式與該線程上運行的代碼進行通信,並要求它爲您工作。你想解決什麼問題? – SLaks

+0

不幸的是@Keppil的答案被刪除了。只是因爲一個方法會跳到某個線程/可運行類,這並不意味着它必須在該線程的堆棧上調用。 –

回答

0

您需要將ClientThread實例的引用:

ClientThread client = new ClientThread(); 
Thread t = new Thread(client); 
t.start(); 

client.b(); 

注:這是不可能的「呼叫」執行的另一個線程,只表示它。所以,OP問題必須減少到'我怎樣才能調用一個在java線程對象內部的方法'。所以,@Keppil答案是不正確的,不應該被刪除。

+0

我猜想OP想要像SwingUtilities.invokeLater()或ExecutorService.submit()這樣的東西,即將一段代碼傳遞給另一個線程的方式。 –

+0

ExecutorService.submit()如何應用於這種情況? –

+0

馬丁你的答案不回答我想要做的,但我已經添加了一些更多的信息,我的帖子現在是否澄清了我想要實現的目標? –