Thread.sleep를 소개 () 메소드

슬립 () 메소드는 잠금하지만 릴리스 CPU를 해제하지 않습니다
잠금 리소스에서 작동하는 여러 스레드가있는 경우 스레드가 잠금을 소유하는 경우,하지만 수면 () 메소드의 구현의 방법을 구현한다. 만 스레드에서 다른 스레드가 깨어나서 잠금을 해제 한 후, 방법을 실행하고, 스레드는 다시 경쟁하기 위해 자원을 잠글 수 있습니다.
티켓 예 :
클래스는 구현 실행 가능한을 {MyThread2

private int TICKET = 5;

@Override
public void run() {
    while (true) {
        synchronized (this) {
            if (this.TICKET > 0) {
            //得到当前线程名字
            System.out.print(Thread.currentThread().getName());
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println( "卖票:票数剩余:" + (--TICKET));
            } else {
                System.out.println("票已经卖完");
                break;
            }
        }
    }
}

}
결과 :
도체 A를 권 : 나머지 표 4
도체 A를 권 : 나머지 투표 3
도체 표 C : 나머지 투표 2
도체 C 티켓 : 나머지 투표하십시오
도체 C 티켓 : 나머지 투표 : 0
표 밖으로 판매 된
티켓은 매진 된
매진 된 티켓을
잠금 스레드 때 소지 한 후, 도체가 100ms의 잤다에도 불구하고, 투표 (투표> 0)의 손을 발견, 그것은 항상 성공 티켓이 판매되고있다. 대신은 수면 중에 멀리 다른 스레드 잠금 장치에 의해, 티켓은 판매하지 않았다 납치. 만에서의 if 문을 실행 한 후 동기화 () {} 메소드 본문 후, 다시 날치기 다른 자원과 자원을 잠급니다.
여기에 설명 왜 사용하는 각 스레드 Thread.start ()가 실행 () 메소드를 한 번 실행되기 때문에 (사실) {} 구조가 싸서있다. 아웃되면, 그 결과는 각 스레드는 티켓을 판매 할 수 있다는 것입니다, 올 수 없었다.
수면 () 메소드는 대신 CPU 시간 슬라이스의, 잠금을 보유, 컵 리소스를 해제합니다. 다른 스레드가 잠금의 소유 이외에 다른 자원을 수행 할 수 있습니다.

게시 14 개 원래 기사 · 원의 칭찬 0 · 조회수 334

추천

출처blog.csdn.net/qq_38205881/article/details/103548904