Frudy
7k
2019-05-24 16:23:25
4
1636

Thread.sleep()는 매개값만큼 정지를 보장하지않는군요.


Thread.sleep(100);하면 무조~건 100ms동안 (약간의 오차) 정지되는게 "보장" 되는줄알았어요.


package test;

import java.util.LinkedList;
import java.util.List;

public class Test
{
	public static void main(String[] args)
	{
		Thread th = new Thread(()->
		{
			List<String> list = new LinkedList<>();

			for(int i = 0 ; i < 100000000 ; i++)
				list.add("apple");
		});
		th.start();
		
		Thread th2 = new Thread(()->
		{
			List<String> list = new LinkedList<>();

			while(true)
			{
				try 
				{
					Thread.sleep(100);
					System.out.println("0.1초마다 실행중임");
					
				} catch (InterruptedException e) 
				{
					
				}
			}
		});
		th2.start();
	}
}

아예 1.5초이상 정지 되기도 하고 2초를 넘기기도 하고.. 

그러다 갑자기 0.1초 동안 잘 정지되기도 하고..


이유는 짐작이 가지만, 뭔가 진리처럼 알고있던게 깨져서 쇼킹하네요잉

0
  • 댓글 4

  • 냉동참치
    693
    2019-05-24 16:30:19

    sysout으로 확인하셔서 그런건 아닌가여?

    해당부분이 버퍼(?)가 심해서 저 연산속도를 못따라갈건데

  • 냉동참치
    693
    2019-05-24 16:42:35
  • 더미
    15k
    2019-05-24 17:45:02

    머 흔한 착각입니다.

  • 이뉴
    639
    2019-05-24 18:50:57
    C에서도 Sleep은 정확한 시간을 보장하진 않습니다.
  • 로그인을 하시면 댓글을 등록할 수 있습니다.