2010-03-15 3 views
2

개체가 Java로 인스턴스화되면 인스턴스가 생성 된 스레드에 바인딩되어 있습니까? 왜냐하면 한 스레드에서 익명으로 인터페이스를 구현하고 다른 스레드로 인터페이스를 전달하기 때문에 모든 메소드가 원래 스레드에서 실행되기 때문입니다. 만약 그들이 생성 스레드에 바인딩되어 있다면, 어쨌든 그것을 호출하는 스레드에서 실행되는 객체를 생성 할 수 있습니까?기본 Java 멀티 스레딩 질문

+0

"원래 스레드에서 실행 중"이라고 어떻게 알 수 있습니까? –

+0

그래서 인터페이스를 구현하는 익명의 클래스를 만들었습니다. 어떻게 "다른 스레드로 전달"합니까? 파이프? 흐름? 스레드의 클래스 생성자에 보강으로 전달합니까? – Mark

+0

음, 메시지를 통해 전달합니다. 다른 스레드가 메시지를 받고 코드 (드로잉 코드)를 실행하려고하면 원래 스레드에서 드로잉을하고 있으며 그 드로잉은 금지되어 있다고 주장합니다. – veered

답변

3

:

MyClass.staticMember.run(); 

다음 run() 방법 스레드 B에서 실행된다 :

MyClass.staticMember = new Runnable() {...}; 

쓰레드 B 해당 객체의 메소드를 호출 .

스레드 은 그 당시에 실행되는 코드를 계속 실행합니다.

+0

글쎄, 그것은 확실히 원래 스레드에서 객체의 메소드를 실행하고 있습니다. 그것이 나에게 준 오류는 매우 구체적이었다. 도움이된다면 표준 Java VM이 아닌 Android에서 모두 가능합니다. – veered

+0

위에 게시 한 경우 ** run() **은 예외없이 항상 스레드 B에서 실행됩니다. 더 많은 코드를 게시하면 도움을받을 수 있습니다. 그리기 API에 대한 Mark의 설명이 들립니다. – Martin

1

오브젝트가 작성된 스레드에 바인드되지 않았습니다 ... 주 스레드에서 메소드를 호출하는 유일한 방법은 주 스레드에서 호출하는 것입니다.

threadDetect("main"); 

아이에서 당신을 스레드 : 전화를 메인 스레드에서

public threadDetect(string which) 
{ 
    System.out.println("Executed from " + which + " thread."); 
} 

:

그것은 단순히 더미 기능을 ...하는 스레드하는 방법을 호출 볼 비교적 쉽게 전화 :

threadDetect("child"); 

OP가 비슷한 방법으로 어떤 스레드가 EXE인지 탐지하고 있는지 확실하지 않습니다. 방법을 잘라내지만, 이것이 그 방법 중 하나입니다. 스레드 객체 만들면