2014-01-12 142 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

马丁你的答案不回答我想要做的,但我已经添加了一些更多的信息,我的帖子现在是否澄清了我想要实现的目标? –