2014-07-24 2 views
-2

나는 사용하여 숫자를 생성하는 것을 시도하고있다 : 나는 너무 빨리가 동일한 지 일 연속, 이러한 때로는 번호 5 번을 생성해야지연 1 밀리 초가 작동하지 않습니까?

System.currentTimeMillis() 

을 (그러나 나는 그들을 싶지 않아

TimeUnit.MILLISECONDS.sleep(1); 
: 같은 우리 고유 필드의 일부)

로를 사용하는 것처럼 나는 내가 사용, 같은되는 것을 방지 할 수있는 하나 하나가 생성 될 때 사이에 지연을 넣을 수 있다고 생각

하지만 여전히 동일한 번호가 생성됩니다. . 내가 약 60 이상으로 늘리면 새 것을 생성하는 것으로 보인다. 왜 이것이지 이해하려고 노력하고 있습니까? 감사합니다

+0

'Thread.sleep (1)'을 사용할 수 있습니다. 이렇게하면 현재 스레드가'1 밀리 초 '동안 잠자기 상태가되어 원하는 지연을 줄 수 있습니다! – ItachiUchiha

+0

나는 이미 Thread.sleep (1)을 시도했지만 이것이 작동하지 않았다. 감사합니다 – juliet

+1

'UUID uuid = UUID.randomUUID();를 사용 하시길 권합니다. –

답변

8

이 동일하지 않습니다 현재 시간에 시작하는 5 개 개의 번호를 생성하려면 - 지금까지 으로 내가 유일한 요구 사항이다 말할 수있다 - 당신은

long t = System.currentTimeMillis(); 

long ts[] = { t, t+1, t+2, t+3, t+4 }; 

스레드를 사용할 수 있습니다. 잠은 여기에 터무니 없다. 사용자 (또는 누구든지)는 지금 계산할 수있는 것에 대한 지연을 경험해서는 안됩니다. Thread.sleep를위한

4

자바 문서()는 말한다 :

Causes the currently executing thread to sleep (temporarily cease execution) for the 
specified number of milliseconds, subject to the precision and accuracy of system 
timers and schedulers. 

은 "정밀도와 시스템 타이머와 스케줄러의 정확성"에 대한 그 비트가 매우 중요하다. 그 이유는 당신이 Thread.sleep(60)을 사용할 때까지 아무것도 얻지 못하는 이유입니다. 그 시스템 타이머는 정확하지 않습니다. 당신이하려고하는 이유

지금 더 나은 질문은 이다 "번호를 생성 ..."

+0

* 정확합니다. . – djechlin

+0

흠, Wikipediea는 "측정 시스템의 정확성은 해당 수량의 실제 (실제) 값에 대한 수량 측정의 친밀도입니다." 나는 59와 1 사이의 차이가 매우 정확하지 않다 (1 밀리 초의 실제 값에 가깝다)라고 말하고 싶다. – markspace

-2

Thread.sleep를 스레드가 잠을 것입니다 보장하지만 얼마나 오래. 최소한 1 밀리 초 동안 확실히 잠들지 만, 당신의 OS가 jvm에 우선 순위를주지 않을 수도 있고, jvm이 1 밀리 초 후에 스레드에 우선 순위를 부여하지 않을 수도 있습니다.

+0

왜이 대답을 downvoting입니까? –

+0

OP와 마찬가지로 "내 코드가 컴파일되지 않는다"고 했으므로 "아니오"라고 대답했습니다. 귀하의 대답이 OP 운영 체제에 적용되지 않는 이유를 설명하십시오. – djechlin

+0

@djechlin 농담 해? 그는 코드가 컴파일되지 않는다고 어디에서 말합니까? 그리고 어떻게 내 대답은 4 upvotes있어 답변보다 다른가요? –

0

에 System.currentTimeMillis를위한 JavaDoc()는 말한다 :이에서

"Note that while the unit of time of the return value is a millisecond, 
    the granularity of the value depends on the underlying operating system 
    and may be larger. For example, many operating systems measure time in 
    units of tens of milliseconds." 

, 그것은 당신의 문제는 자바되지 않습니다 가능성이 높습니다 - 관련 아니라 운영 체제가 당 시간 유지되지 않는다 - 밀리 초.

관련 문제