2011-10-04 7 views
-1

스레드를 호출하는 다음 두 가지 방법의 차이점을 알고 싶습니다.스레드 (혼란)에 대한 일반적인 토론

두 시나리오

Thread Implementation Scenario 1

의 두 사진을보고하십시오

Thread Implementation Scenario 2

"시나리오 1"내가 내 프로그램의 이성을 잃었 내 문제는 내가 따를 때 내가 직면 한 행동이라는 것이다

"MyClass의 다른 명령"이 실행되지 않았습니다.

시나리오 2를 따르면 내 시퀀스가 ​​부드러 웠습니다. 누군가가이 행동을 발견했거나 오작동입니까?

친절히 의견을 말하십시오.

안부,

+2

두 경우 모두 컴파일되지 않기 때문에 올바르지 않습니다. 스레드는 인터페이스가 아니라 클래스입니다. 그래서 당신은 그것을 구현할 수 없습니다. –

+0

이 경우 Thread 인터페이스 란 무엇입니까? 표준 Java에서 스레드는 인터페이스가 아니라 클래스입니다. –

+0

오, 미안 해요 그것의 큰 오타가 스레드를 구현하지 않습니다, 그것은 Runnable을 구현합니다.당신이 실수를 무시하고 계속해서 호출 메커니즘 –

답변

0

내가 대신 (이미 언급 한 바와 같이 인터페이스하지 않은) Thread를 구현하는 당신이 Runnable을 구현하는 의미 있다고 생각한다.

질문은 다음과 같을 것입니다. 귀하의 질문이 없기 때문에 추측에 불과합니다. 누가 스레드를 시작해야합니까? MyClass 또는 MyThread?

기본적으로 MyThread은 실제로는 실행 가능한 작업이며 추가적으로 스레드 자체를 처리해서는 안되기 때문에 시나리오 1을 선호합니다.

따라서 MyClass은 스레드를 생성하고 시작해야합니다. 이것은 또한 스폰 된 스레드에 대한 참조를 유지하고 나중에 join() 또는 다른 메소드를 호출 할 수 있습니다. 당신은 스레드 개체에 액세스 할 수 있습니다

+0

예 토마스 나는 그것을 유감스럽게도 오타가 아닌 스레드 인 Runbable을 구현하려고했습니다. –

0

public class MyRunnable implements Runnable { ... }, 예를 들면 : 나는이에 MyThread을 변경 거라고 (!) 참고로

, 그것을 끝내거나 상태를 폴링 할 때까지 기다리는 것. 시나리오 2에서는 변수 t이 클라이언트 코드에서 액세스 할 수 없기 때문에이 작업을 수행하지 않을 수 있습니다. 이것을 달성하려면 t을 외부 코드에서 볼 수있게하거나 Thread 메쏘드를 오버라이드해야합니다 (약간 쓸데 없을 것입니다). invokeThread을 일종의 편리한 방법으로 사용하는 경우 t을 반환하는 것이 좋습니다.

시나리오 2는 "MyThread이 스레드 실행을 캡슐화하고 상태를 제어 함"을 의미하는 경우 Thread (다소 혼란 스럽습니다)을 확장 할 필요가 없습니다.

the other comment에서 언급했듯이 Thread을 서브 클래스 화하는 것이 아니라 Runnable을 두 번째로 구현합니다.

+0

Chabicht 내가 실수를 구현하지 못했습니다 오타 오류 이미지를 변경했습니다 Runnable이 실수에 대한 미안 해요 –

+0

내가 내 관찰에 내가 그것을 편집 한 후 내 질문에 나타났습니다 포함되어 있습니다. –

관련 문제