run () 방법에 매개 변수를 전달하는 방법
1. 구조 함수 전참
2. 구성원 변수 전참
3. 리셋 함수 참조
문제: 처리 라인의 반환값을 어떻게 실현합니까?
1. 메인 스레드 대기법(장점: 실현하기가 간단하고 단점: 기다려야 할 변수가 많으면 코드가 매우 비대해진다. 게다가 시간을 정확하게 제어할 수 없다)
public class CycleWait implements Runnable{
private String value;
public void run() {
try {
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
value = "we have data now";
}
public static void main(String[] args) throws InterruptedException {
CycleWait cw = new CycleWait();
Thread t = new Thread(cw);
t.start();
// while (cw.value == null){
// Thread.currentThread().sleep(100);
// }
t.join();
System.out.println("value : " + cw.value);
}
}
2. Thread 클래스의join()을 사용하여 현재 스레드를 막아서 하위 스레드가 처리되기를 기다립니다(단점: 정확도가 부족함)
3. Callable 인터페이스를 통해 구현: FutureTask Or 스레드 풀을 통해 획득
public class MyCallable implements Callable {
@Override
public String call() throws Exception{
String value="test";
System.out.println("Ready to work");
Thread.currentThread().sleep(5000);
System.out.println("task done");
return value;
}
}
FutureTask 구현 방법
public class FutureTaskDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask task = new FutureTask(new MyCallable());
new Thread(task).start();
if(!task.isDone()){
System.out.println("task has not finished, please wait!");
}
System.out.println("task return: " + task.get());
}
}
스레드 풀 구현 방식
public class ThreadPoolDemo {
public static void main(String[] args) {
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
Future future = newCachedThreadPool.submit(new MyCallable());
if(!future.isDone()){
System.out.println("task has not finished, please wait!");
}
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
newCachedThreadPool.shutdown();
}
}
}
전재 대상:https://www.cnblogs.com/vingLiu/p/10663385.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.