Java가 다중 스레드를 실현하는 세 가지 방식을 상세히 설명하다
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Main {
public static void main(String[] args) {
// : Thread
int i = 0;
// for(; i < 100; i++){
// System.out.println(Thread.currentThread().getName() + " " + i);
// if (i == 5) {
// ThreadExtendsThread threadExtendsThread = new ThreadExtendsThread();
// threadExtendsThread.start();
// }
// }
// : Runnable
// for(i = 0; i < 100; i++){
// System.out.println(Thread.currentThread().getName() + " " + i);
// if (i == 5) {
// Runnable runnable = new ThreadImplementsRunnable();
// new Thread(runnable).start();
// new Thread(runnable).start();
// }
// }
// : Callable
Callable<Integer> callable = new ThreadImplementsCallable();
FutureTask<Integer> futureTask = new FutureTask<>(callable);
for(i = 0; i < 100; i++){
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 5) {
new Thread(futureTask).start();
new Thread(futureTask).start();
}
}
try {
System.out.println("futureTask ruturn: " + futureTask.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
메서드 1, Thread에서 상속
public class ThreadExtendsThread extends Thread {
private int i;
@Override
public void run() {
for(; i < 100; i++) {
System.out.println(getName() + " " + i);
}
}
}
run 방법은 스레드 실행체이고 ThreadExtendsThread 대상은 스레드 대상입니다.방법 2, Runnable 인터페이스 구현
public class ThreadImplementsRunnable implements Runnable {
private int i;
@Override
public void run() {
for(; i < 100; i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
run 방법은 루틴 실행체입니다. 사용할 때 New 하나의Thread 대상, Runnable 대상은target으로Thread 대상에 전달됩니다.또한 같은 Runnable 대상은 여러 Thread의 target으로 사용할 수 있으며, 이 라인들은 모두 Runnable 대상의 실례 변수를 공유합니다.방법 3, Callable 인터페이스 구현
import java.util.concurrent.Callable;
public class ThreadImplementsCallable implements Callable<Integer> {
private int i;
@Override
public Integer call() throws Exception {
for(; i < 100; i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
return i;
}
}
Callable 인터페이스는 Runnable 인터페이스와 유사하지만 상대방보다 강하고 라인 실행체는call 방법으로 이 방법은 반환값과 이상을 던질 수 있습니다.사용 시 Callable 객체를 FutureTask 객체로 포장하고 반환 값 유형을 범용으로 지정합니다.FutureTask의 get 메서드를 호출하여 실행 결과를 가져올 수 있습니다.이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.