[java] 자바 : Thread.currentThread (). sleep (x) 대 Thread.sleep (x)

내 코드 에이 있습니다.

Thread.currentThread().sleep(x);

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

Thread.sleep(x);

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



답변

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

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


답변

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

someOtherThread.sleep(x);

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


답변

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

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


답변

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

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

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

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


답변