개체가 Java로 인스턴스화되면 인스턴스가 생성 된 스레드에 바인딩되어 있습니까? 왜냐하면 한 스레드에서 익명으로 인터페이스를 구현하고 다른 스레드로 인터페이스를 전달하기 때문에 모든 메소드가 원래 스레드에서 실행되기 때문입니다. 만약 그들이 생성 스레드에 바인딩되어 있다면, 어쨌든 그것을 호출하는 스레드에서 실행되는 객체를 생성 할 수 있습니까?기본 Java 멀티 스레딩 질문
2
A
답변
3
:
MyClass.staticMember.run();
다음 run()
방법 스레드 B에서 실행된다 :
MyClass.staticMember = new Runnable() {...};
쓰레드 B 해당 객체의 메소드를 호출 .
스레드 은 그 당시에 실행되는 코드를 계속 실행합니다.
1
오브젝트가 작성된 스레드에 바인드되지 않았습니다 ... 주 스레드에서 메소드를 호출하는 유일한 방법은 주 스레드에서 호출하는 것입니다.
threadDetect("main");
아이에서 당신을 스레드 : 전화를 메인 스레드에서
public threadDetect(string which)
{
System.out.println("Executed from " + which + " thread.");
}
:
그것은 단순히 더미 기능을 ...하는 스레드하는 방법을 호출 볼 비교적 쉽게 전화 :
threadDetect("child");
OP가 비슷한 방법으로 어떤 스레드가 EXE인지 탐지하고 있는지 확실하지 않습니다. 방법을 잘라내지만, 이것이 그 방법 중 하나입니다. 스레드 객체 만들면
"원래 스레드에서 실행 중"이라고 어떻게 알 수 있습니까? –
그래서 인터페이스를 구현하는 익명의 클래스를 만들었습니다. 어떻게 "다른 스레드로 전달"합니까? 파이프? 흐름? 스레드의 클래스 생성자에 보강으로 전달합니까? – Mark
음, 메시지를 통해 전달합니다. 다른 스레드가 메시지를 받고 코드 (드로잉 코드)를 실행하려고하면 원래 스레드에서 드로잉을하고 있으며 그 드로잉은 금지되어 있다고 주장합니다. – veered