2014-01-12 3 views
0

스레드 외부의 스레드 내부에있는 메서드를 어떻게 호출 할 수 있습니까? 경우에 따라 b()는 a()에서 호출되지만 상황에 따라 스레드 외부에서 b()로 이동하라는 신호를 보내려고합니다. 나는이 문제를 해결하기 위해 관찰자 패턴을 사용할 수 있다고 가정하지만, 관찰자 ​​패턴을 두 번 사용할 수 없다면 이미이 스레드에서 관찰자 패턴을 사용하여 다른 것을 할 것입니다.스레드에 신호 보내기

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

client.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 인스턴스에 대한 참조가 필요합니다. 따라서 OP 질문은 'Java 스레드 객체 안에있는 메소드를 어떻게 호출 할 수 있을까요?'로 줄여야합니다. 따라서 @Keppil 대답은 ​​틀리지 않았으므로 삭제되어서는 안됩니다.

+0

OP는 SwingUtilities.invokeLater() 또는 ExecutorService.submit()과 같은 것을 원한다고 생각합니다. 즉, 다른 스레드로 실행할 코드를 전달하는 방법입니다. –

+0

ExecutorService.submit()을이 상황에 어떻게 적용 할 수 있습니까? –

+0

마틴 귀하의 대답은 내가 뭘하려고하는지 대답하지 않지만 좀 더 많은 정보를 추가했습니다, 내 게시물은 지금 내가 뭘 달성하려고하는지 명확하게합니까? –

관련 문제