2012-06-22 2 views
1

Thread#start() 메서드를 재정의하려면 어떻게해야합니까? 그리고 그렇다면 thread의 정상적인 기능에 영향을 미칩니 까?Thread # start() 메서드를 Final로 선언하지 않았으므로이 메서드를 재정의 할 수 있습니까?

+3

자세한 정보를 제공하십시오. Thread.start()에 대해 이야기하고 있습니까? 이 일을해야하는 특별한 이유가 있습니까? –

+0

@Elliiot : 예 Thread.start()에 대해 이야기하고 있습니다. 자바 기본을 배우고 실험하고 싶습니다. – Learner

+3

JustTryIt (tm)을 사용할 수 없습니까? –

답변

2

Thread.start()을 의미하는 경우이를 무시할 수 있습니다. 하지만 super.start()을 호출하지 않으면 스레드가 아무 것도하지 않습니다.

+0

일반적으로 우리가 thread_object.start()라고 부르기 때문에 super.start()가 필요한 이유 – Learner

+2

'start()'를 오버라이드하면'start()'를 오버라이드하면' super.start()'를 사용하십시오. 스레드가없이 시작되지 않습니다. –

+0

우리가 대체하는 메서드가 일반적으로 호출되는 것처럼 일반적으로 호출되지 않습니다. – Learner

1

원하는 경우 무시할 수 있습니다.

방법에 따라 수행하려는 작업에 따라 정상적인 기능에 영향을 줄 수 있습니다. 귀하의 질문은 그 의미에서 매우 구체적이지 않습니다. 무엇 해야합니까 귀하의 방법으로 super.start() 호출하여 초기화가 여전히 발생하는지 확인하십시오.

0

Thread.start()을 무시할 수 있지만 super.start()을 호출하지 않으면 새 스택에 새 트레드가 생성되지 않습니다.

super.start()은 원래 스택 native void start0()을 호출하여 기본적으로 새 스레드를 시작합니다.

+0

함수 이름이 여전히 동일하며 여전히 동일한 실행 메소드를 호출해야하므로 새 스레드가 생성되는 이유는 무엇입니까? – Learner

+0

답변이 업데이트되었습니다. – amicngh

1

일부 언어와 달리 Java를 사용하면 Thread.start를 비롯하여 거의 모든 것을 무시할 수 있습니다. 이렇게하면 확실하게 start 메서드의 정상적인 기능에 영향을 미칩니다. 일부 언어와 달리 Java는 소스 코드를 제공하므로 원본 코드 start의 기능을 정확하게 볼 수 있습니다.

일반적으로 살펴 보는 것이 좋습니다. 오버라이드하는 메소드가 무엇을해야하는지 (가장 간단하게 슈퍼를 호출함으로써)를 보는 것 외에도, 플랫폼의 디자인 철학과 훌륭한 자바 프로그래밍에 대해 많은 것을 배울 수 있습니다.

아마도 이것이 start을 우선 무시하는 이유입니다.하지만 때때로 간략히 재정의 할 필요가없는 메소드를 재정의하는 것이 유용하기 때문에 간혹 메시지를 기록하고 언제 무엇, 왜에 의해 호출되고 있습니다.

관련 문제