자바 : Thread.currentThread (). sleep (x) 대 Thread.sleep (x)


86

내 코드 에이 있습니다.

Thread.currentThread().sleep(x);

Eclipse는 정적을 사용하라고 말합니다.

Thread.sleep(x); 

대신 왜? 차이점은 무엇입니까?이 두 가지 방법 사이에 기능상의 차이가 있습니까?


1
Eclipse에는 인스턴스 변수를 통한 정적 구성원 액세스를 클래스 이름을 통한 정적 액세스로 자동으로 대체하는 'Save Action'이 있습니다. '이'등).
les2 2010-01-17

답변:


136

두 가지가 아닌 한 가지 방법이 있으며 정적입니다. 인스턴스 참조를 통해 정적 메서드를 호출 할 수 있지만 좋은 스타일은 아닙니다. 프로그래머가 인스턴스 메서드를 호출하고 있다고 생각한다는 것을 나타냅니다. 혼란스러워하는 프로그래머는 다른 스레드 (현재 스레드가 아님)가 이런 방식으로 잠자 게 할 수 있다고 생각할 수 있습니다.

두 줄의 코드 모두 동일한 작업을 수행하지만 두 번째는 스타일이 더 좋습니다.


25
프로그래머가 someThread.sleep ()을 통해 특정 스레드를 잠자기 상태로 만들 수 있다는 점을 언급하는 데 +1.
Chii

32

Java에서 sleep은 정적 방법입니다. 두 예제 모두 정확히 동일한 작업을 수행하지만 이전 버전은 특정 개체에 대한 메서드를 호출하는 것처럼 보이지만 전혀 수행하지 않기 때문에 혼란 스럽습니다. 귀하의 예에서는별로 중요하지 않지만 다음과 같은 경우 더 위험합니다.

someOtherThread.sleep(x);

이번에는 다른 스레드에 절전 모드를 지정하는 것처럼 보이지만 실제로는 현재 스레드를 절전 모드로 전환합니다. 이러한 유형의 실수를 피하는 방법은 항상 특정 개체가 아닌 클래스를 사용하여 정적 메서드를 호출하는 것입니다.


이 한 줄 "someOtherThread.sleep (x);"를 실행하는 동안 currentThread와 someOtherThread가 모두 절전 모드로 전환된다는 의미입니까? ??
Kanagavelu Sugumar 2013 년

3
아니요. 현재 스레드는 Thread 객체 .sleep이 호출 되어도 절전 모드로 전환됩니다. 다른 ThreadS를 잠자기 상태로 둘 수는 없습니다.
Torque

3

두 메서드 호출은 동일한 메서드를 호출하기 때문에 동작이 동일하지만 정적 필드 및 메서드에 액세스하기위한 인스턴스가 아닌 클래스 이름 ( 이 경우 Thread )을 사용하면이 정 적성이 명확 해집니다. 이것이이 경고가 생성되는 이유입니다.

그러나 정적 필드와 메서드가 대부분의 IDE (예 : Eclipse 및 IntelliJ IDEA의 기울임 꼴 글꼴)에서 특정 방식으로 표시된다는 점을 고려하면이 경고가 여전히 필요합니까? 단순한 편집기가 사용되는 Java 초기 시절만큼 필요하지 않을 수도 있습니다.


0

Thread.currentThread().sleep(x);또는 EclipseThread.sleep(x); 가 필요한 경우 정적 컨텍스트가 필요 하다고 말하는 방식 이므로이 수면으로 약간의 지연을 유지합니다.

하나의 개체에 의해 설정된 정적 패러다임은 특정 개체 힙 인쇄 수명 주기에 만 영향을 미칩니다. 전체 개체 수명주기 정적이 그다지 귀찮지 않고 필요한 경우 코딩을 용이하게하는 데 사용할 수 있지만 정적 발로 신중하게 수행해야한다는 점을 고려하면 print는 메모리 에있는 Class의 런타임 단일 인쇄 사본이 아닌 이름과 같이 Class(예 :-) 참조됩니다 .Class.forName(pkg.className)objectHEAP

다시 객체의 사용에는 Weak, Phantom, Strong 종류의 참조에 의한 장단점이 있습니다 ....,

코드는 자연에 의해 복잡합니다. 작동하고 기능적으로 만들기 위해 우리가하는 방법입니다.


1
쓰레드에 대해 이야기하자면, 스레딩에 동기식이있을 수 있지만 비동기 적으로 생성됩니다. 본질적으로 모든 것은 비동기 적이지만 언젠가는 동기적인 것을 발견합니다. 양자 또는 천문학을 침해하더라도 그 어떤 것도 동기식이 아닙니다.
데브 아난드 Sadasivam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.