2011-03-22 6 views
4

새 스레드를 만들려면 클래스를 확장하는 대신 Runnable 인터페이스를 사용하는 것이 가장 좋습니다. 이것이 사실이라면, 왜 Java는 심지어 우리가 Thread 클래스를 확장하도록 허용합니다. 왜 안되니? final?스레드 및 실행 가능

+0

가능한 복제본 [ "implements Runnable"대 "extends Thread"대] (http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread) –

답변

4

제작하고있는 것이 거의 확실한 스레드가 아니기 때문에. 그것은 ThingTheDoesSomeUsefulWork이고, 당신은 그것이 유용한 스레드를 별도의 스레드에서 수행하기를 원할 것입니다. 30 초마다 웹 서버를 폴링하는 것을 쓰고 있다고 가정 해 봅시다. ThingThatPollsWebServer은 (는) 스레드입니까? 아니면 웹 서버를 폴링하는 것일뿐입니다.

게다가, Runnable을 만들면 테스트하기가 쉬워지고 스레드를 사용하지 않고 실행 프로그램 프레임 워크를 사용하여 작업을 실행할 수있는 유연성을 제공합니다.

+0

이 질문에 대한 대답은 무엇입니까? Runnable 인터페이스를 옹호하는 것만 보입니다. Thread를 확장하는 것은 어떻습니까? –

+0

네, 할 일이 옳기 때문에! 스레드의 동작을 특수화하려면 스레드 만 확장하십시오. – dty

1

스레드의 동작을 변경하거나 기능을 추가 할 수 있습니다. 이 경우 Thread 클래스를 확장하는 것이 가장 적합합니다.

+0

정확합니다. 인용 된 진술은 무조건적으로 진실이 아니기 때문에 그것을 사실로 받아들이고 왜'Thread' 클래스 디자인이 그것을 따르지 않는지 궁금해합니다. – erickson

+0

네 말이 맞아. 그러나'Thread'가 서브 클래 싱되어 얼마나 자주'run'을 구현하지 않는지 얼마나 자주 보십니까? –

+0

btw, '클래스'또는 '문자열'의 동작을 변경하려면 어떻게해야합니까? 아닙니다. 그건 나쁜 논리 야. –

-2

스레드를 사용하는 것은 이전 스레드 (java 5.0 이전)에서 스레드를 사용하는 방법이었습니다 :). ExecutorService 클래스를 살펴보십시오.