2013-10-16 2 views
0

안녕하세요 저는 ms를 반환하는 하나의 동기화 된 메서드가 있습니다. 누구든지 각 개체가 아래 코드에서 고유 값을 얻을 수 있는지 여부를 알 수 있습니까?고유 값에 대한 개체 잠금

public static synchronized Long generateIdforDCR() 
     { 
     int val= return System.nanoTime(); 
     } 

전화는 항상 고유 한 값을 얻을 것이다

forloop 1... 1000 
{ 
    ClassName cn=new ClassName(); 
    cn.generateIdforDCR(); 

} 

같은 다른 클래스에있을 것입니다.

+0

동기화에는 아무런 관련이 없습니다. (또한'nanoTime'은'long'을 반환합니다. 시스템이 너무 빠르면 동일한 값을 두 번 반환 할 수도 있습니다 .. –

+0

실제로'long'을 반환하는 메서드의 반환 형식이'String' 인 이유는 무엇입니까? –

+0

static 클래스 인스턴스에 대한 메서드입니다. 그냥 ClassName.generateIdforDCR();을 호출 – alaster

답변

2

아니요 - 각 호출이 다른 값을 반환한다는 보장은 없습니다. 호출 (동기화 포함)이 nanoTime()에 사용 된 내부 클럭의 세분성보다 짧은 시간이 걸리는 것은 상상할 수 없습니다. (사실, 나는 이것이 내 노트북에 일어날 볼 수 있습니다.)

그것은 소리가 방금 대신 AtomicLong을 사용해야합니다 같은 :

당신보다 더 적은을 호출하는 경우 (당신에게 고유 번호를 줄 것이다
private static final AtomicLong counter = new AtomicLong(); 

public static Long generateIdforDCR() { 
    return counter.incrementAndGet(); 
} 

2 번) 해당 실행. 더 큰 범위 (예 : 여러 순차 실행 또는 잠재적으로 여러 프로세스의 여러 동시 실행)에서 고유해야하는 경우 약간 다른 접근 방식이 필요합니다.

+0

우리는 그 문제에 붙어있다, 당신은 코멘트를 할 수 있습니까? – zdhim

+0

@ Champ23 : "그"문제는 무엇을 의미합니까? 현재 코드가 손상되어 변경해야합니다. 접근 방법과 한계에 대한 세부 정보를 제공했지만, 컨텍스트에서 당신이 해결하려고하는 문제의 측면에서. –

+0

고마워, 이미 구현, 그래서 점점 중복. 그냥 알고 싶어이 개체와 동기화 된 함수를 호출하는 원인입니다. – zdhim

관련 문제