Java 병렬 프로그래밍 예시 (5): 스레드 휴면 및 복구
다른 하나는 sleep () 방법으로 매거 유형 TimeUnit의 요소를 통과하는 것이다.이 방식은 현재 라인을 휴면시키기 위해 Thread의 sleep () 방법을 사용합니다. 지정한 단위의 시간을 매개 변수로 받아들여 대응하는 밀리초로 변환할 수 있습니다.
이 절에서, 우리는sleep () 방법을 사용하여 1초에 한 번씩 현재 시간을 인쇄하는 프로그램을 개발할 것이다.
그 사실을 알다
아래와 같은 절차에 따라 이 절의 예시를 실현한다.
1. FileClock이라는 클래스를 만들고 Runnable 인터페이스를 실현합니다.코드는 다음과 같습니다.
public class FileClock implements Runnable {
2.run() 방법을 실현한다.코드는 다음과 같습니다.
@Override
public void run() {
3. 열 번 반복하는 순환을 쓰고 매번 교체할 때 Date 대상을 만들고 컨트롤러에 출력합니다.그리고 TimeUtil의 SECONDS 속성을 통해 sleep () 방법을 호출하여 1초의 실행 라인을 지연시킵니다.sleep () 메서드가 Interrupted Exception 이상을 내보낼 줄 알았습니다.그래서 우리는 이상을 포착하기 위해 몇 줄의 코드를 더 써야 한다.루틴이 중단될 수 있다면, 루틴에 사용되는 자원을 방출하거나 닫는 것이 최선의 실천이다.코드는 다음과 같습니다.
for (int i = 0; i < 10; i++) {
System.out.printf("%s
", new Date());
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
System.out.printf("The FileClock has been interrupted.
");
}
}
4. 우리는 이미 실현된 루틴 종류가 있다.이제 우리는 주류를 실현한다.FileMain이라는 클래스를 만들고 main () 방법을 실현합니다.코드는 다음과 같습니다.
public class FileMain {
public static void main(String[] args) {
5. FileClock 객체를 만들고 작업을 수행할 스레드를 생성합니다.그리고 라인을 시작합니다.코드는 다음과 같습니다.
FileClock clock = new FileClock();
Thread thread = new Thread(clock);
thread.start();
6. 메인 라인에서 TimeUtil의 SECONDS 속성을 통해 sleep () 방법을 호출하여 5초를 기다립니다.코드는 다음과 같습니다.
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
7. FileClock 스레드를 중단합니다.코드는 다음과 같습니다.
thread.interrupt();
8. 실행 예시, 실행 효과 보기.그 까닭을 알다
이 프로그램을 실행할 때, 프로그램이 어떻게 1초에 한 번씩 날짜 대상을 인쇄하고, 라인이 중단되는 상황을 발견할 수 있습니다.
sleep () 방법을 호출할 때, 라인은 CPU를 떠나서 한동안 실행을 중지합니다.이 기간 동안 라인은 CPU가 필요하지 않기 때문에 CPU는 다른 작업을 수행할 수 있다.
휴면 중인 라인이 중단되면 휴면이 끝날 때까지 기다리지 않고 인터럽트 Exception을 즉시 던집니다.
영원히 끝이 없다
Java 병렬 API에는 스레드를 CPU에 양보할 수 있는 또 다른 방법이 있습니다.이것이 바로 yield() 방법이다. 이 방법을 호출하는 것은 자바 가상 컴퓨터가 메시지를 보내서 CPU를 다른 라인에 양보할 수 있다는 것을 설명하는 것이다.Java 가상 시스템은 이 요청에 응답하지 않습니다.일반적인 상황에서 이 방법은 디버깅 프로그램에서만 사용된다.
나래주의
본고는 《Java7 Concurrency Cookbook》(D 오이고에서 《Java7 병발 예시집》으로 번역)에서 번역한 것으로 학습 자료로만 사용된다.권한이 없으면 어떠한 상업 행위에도 사용할 수 없다.
소소하다
이 절에서 사용하는 예시 코드의 전체 버전입니다.
FileClock 클래스의 전체 코드
package com.diguage.books.concurrencycookbook.chapter1.recipe5;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* 。
* Date: 2013-09-18
* Time: 23:11
*/
public class FileClock implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.printf("%s
", new Date());
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
System.out.printf("The FileClock has been interrupted.
");
}
}
}
FileMain 클래스의 전체 코드
package com.diguage.books.concurrencycookbook.chapter1.recipe5;
import java.util.concurrent.TimeUnit;
/**
*
* Date: 2013-09-19
* Time: 00:29
*/
public class FileMain {
public static void main(String[] args) {
FileClock clock = new FileClock();
Thread thread = new Thread(clock);
thread.start();
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
thread.interrupt();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.