2017-04-07 2 views

답변

2

당신은 항상 같은 것을 할 수있다 : 지금

Thread current = Thread.currentThread() 

와; 스레드의 map/list/...가 있으면 참조를 간단히 비교할 수 있습니다. 간단한 예 :

당신은 당신의 클래스에 두 개의 필드를 추가

private Thread reader = 
private Thread writer = 

을 그리고 당신이

synchronized foo() { 
    if (Thread.currentThread() == reader) ... 

그리고 레코드에 대한

할 수 : 일이 그렇게 쉬운 보이지만, 한 사람이 "처리를 이 문제는 "오히려 뒤로 물러나야합니다.이 냄새는 XY problem 입니다.

의미 : "실제"세계에서; 나는 이런 코드를 나쁜 연습으로 생각할 것이다. 대부분의 경우, 다른 방법으로 해결해야하는 문제를 해결하려고 시도합니다!

면접관의 대답은 직접적인 기술 답변의 조합 일 것입니다. 그러나 그 "나쁜 연습"문제를 지적했다.

0

현재의 thread가 instanceof를 독자 또는 작가

경우 확인할 수 있습니다
+0

'는 Thread.currentThread()가'항상 Thread' instanceof를'뭔가를 반환합니다. 그러나'extends Thread'는 일반적으로 코드 냄새이기 때문에 현재 Thread 객체의 _type_을 보면 코드가 악취가 나지 않는 경우 아무 것도 알려주지 않습니다. 고스트캣 (GhostCat)이 말했듯이, 개체의 _identity_를 사용하는 것이 좋습니다. 무엇보다도 누가 그것을 호출하는지에 따라 다른 일을하는 코드를 작성하지 않는 것이 좋습니다. –