2012-09-11 3 views
1

나는 기존 Java EE 멀티 스레딩 응용 프로그램을 개발 중입니다.Java의 Thread.sleep은 어떤면에서 유용할까요?

내 응용 프로그램에서이 사실을 이해할 수 없습니다. UserThread이라는 스레드가 하나 있고 그 run 메서드의 while(true) 조건에서는 위치에서 데이터를 읽고 데이터를 Websocket으로 푸시합니다. 그 후에 스레드는 1000 초 동안 잠자 게됩니다.

Thread.sleep()이 유용할까요?

+0

실제로는 최소 1000 초 동안 대기합니다. 그 다음에 실행 가능한 상태가되고 스레드를 다시 가져 오는 것은 스케줄러의 책임입니다 – RNJ

+0

우리에게 보여줄 수있는 코드 샘플이 있습니까? 웹 사이트에서 정보를 가져 오거나 디스크의 파일을 읽는 것입니까? –

+4

1000 초 또는 1000 밀리 초? –

답변

8

한 번에 너무 많은 요청을 보내지 않도록 읽기 및 쓰기를 조절하는 데 사용되는 것처럼 들립니다.

+0

우리의 응용 프로그램에는 1000 밀리 초로 설정된 스로틀 시간이 있고 스레드는 1000 밀리 초 동안 잠자기 상태입니다. 따라서 계속적으로 확인하지 않고 1000 밀리 초마다 요청이 전송됩니다. – Pawan

+0

@PreethiJain - 이미 다른 곳에서 스로틀 링 중이라면'Thread.sleep()'가 무엇인지 모르겠습니다. 요점은 스로틀 링하지 않으면 가능한 빨리 요청을 보내고 읽거나 끝내고있는 끝점을 해머하는 것입니다. 상대방이이를 처리 할 수없는 경우 요청이 계속해서 발생하여 요청이 중단되거나 다른 요청을 사용할 수 없게 될 수 있습니다. 스로틀은 그것을 막으려 고 시도합니다. –

+0

감사합니다. 유용했습니다. – Pawan

4

이것은 매우 나쁜 관행 인 x 초마다 작업을 실행하는 타이머를 에뮬레이트합니다. java.util.Timer 또는 ScheduledThreadPoolExecutor으로 전환하는 것이 좋습니다.

ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1); 

exec.scheduleAtFixedRate(
     new Runnable() { 
      public void run() { 
       // code 
      } 
     }, 0, 1000, TimeUnit.Milliseconds); 
+0

원시 요청 스로틀로 사용되는 경우,'Thread.sleep()'는 그리 심각하지 않습니다. 더 정확한 타이밍이 필요하면'ThreadPoolExecutor'가 나아갈 길입니다. –

+1

@ Rob Hruska :'while (true)'+'sleep'은 시간을 초월한 행동처럼 느껴집니다. – Tudor

+0

나에게도 마찬가지다. 그의 타이밍이 얼마나 정확한지와 스레드가 그냥 앉아있는 것을 얼마나 신경 쓰는지에 달려 있습니다. 'Thread.sleep()'는 보통 kludge이지만, 때로는 작업을 완료 할 수 있습니다. –

관련 문제