스레드를 호출하는 다음 두 가지 방법의 차이점을 알고 싶습니다.스레드 (혼란)에 대한 일반적인 토론
두 시나리오
의 두 사진을보고하십시오"시나리오 1"내가 내 프로그램의 이성을 잃었 내 문제는 내가 따를 때 내가 직면 한 행동이라는 것이다
"MyClass의 다른 명령"이 실행되지 않았습니다.
시나리오 2를 따르면 내 시퀀스가 부드러 웠습니다. 누군가가이 행동을 발견했거나 오작동입니까?
친절히 의견을 말하십시오.
안부,
스레드를 호출하는 다음 두 가지 방법의 차이점을 알고 싶습니다.스레드 (혼란)에 대한 일반적인 토론
두 시나리오
의 두 사진을보고하십시오"시나리오 1"내가 내 프로그램의 이성을 잃었 내 문제는 내가 따를 때 내가 직면 한 행동이라는 것이다
"MyClass의 다른 명령"이 실행되지 않았습니다.
시나리오 2를 따르면 내 시퀀스가 부드러 웠습니다. 누군가가이 행동을 발견했거나 오작동입니까?
친절히 의견을 말하십시오.
안부,
내가 대신 (이미 언급 한 바와 같이 인터페이스하지 않은) Thread
를 구현하는 당신이 Runnable
을 구현하는 의미 있다고 생각한다.
질문은 다음과 같을 것입니다. 귀하의 질문이 없기 때문에 추측에 불과합니다. 누가 스레드를 시작해야합니까? MyClass
또는 MyThread
?
기본적으로 MyThread
은 실제로는 실행 가능한 작업이며 추가적으로 스레드 자체를 처리해서는 안되기 때문에 시나리오 1을 선호합니다.
따라서 MyClass
은 스레드를 생성하고 시작해야합니다. 이것은 또한 스폰 된 스레드에 대한 참조를 유지하고 나중에 join()
또는 다른 메소드를 호출 할 수 있습니다. 당신은 스레드 개체에 액세스 할 수 있습니다
예 토마스 나는 그것을 유감스럽게도 오타가 아닌 스레드 인 Runbable을 구현하려고했습니다. –
public class MyRunnable implements Runnable { ... }
, 예를 들면 : 나는이에 MyThread
을 변경 거라고 (!) 참고로
t
이 클라이언트 코드에서 액세스 할 수 없기 때문에이 작업을 수행하지 않을 수 있습니다. 이것을 달성하려면
t
을 외부 코드에서 볼 수있게하거나
Thread
메쏘드를 오버라이드해야합니다 (약간 쓸데 없을 것입니다).
invokeThread
을 일종의 편리한 방법으로 사용하는 경우
t
을 반환하는 것이 좋습니다.
시나리오 2는 "MyThread
이 스레드 실행을 캡슐화하고 상태를 제어 함"을 의미하는 경우 Thread
(다소 혼란 스럽습니다)을 확장 할 필요가 없습니다.
the other comment에서 언급했듯이 Thread
을 서브 클래스 화하는 것이 아니라 Runnable
을 두 번째로 구현합니다.
Chabicht 내가 실수를 구현하지 못했습니다 오타 오류 이미지를 변경했습니다 Runnable이 실수에 대한 미안 해요 –
내가 내 관찰에 내가 그것을 편집 한 후 내 질문에 나타났습니다 포함되어 있습니다. –
두 경우 모두 컴파일되지 않기 때문에 올바르지 않습니다. 스레드는 인터페이스가 아니라 클래스입니다. 그래서 당신은 그것을 구현할 수 없습니다. –
이 경우 Thread 인터페이스 란 무엇입니까? 표준 Java에서 스레드는 인터페이스가 아니라 클래스입니다. –
오, 미안 해요 그것의 큰 오타가 스레드를 구현하지 않습니다, 그것은 Runnable을 구현합니다.당신이 실수를 무시하고 계속해서 호출 메커니즘 –