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);
}
}
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
String value = "test";
System.out.println("准备执行...");
Thread.currentThread().sleep(5000);
System.out.println("开始执行...");
return value;
}
}
***********************************
public class FutureTaskDemo {
public static void main(String[] args) throws Exception{
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
new Thread(futureTask).start();
if (!futureTask.isDone()){
System.out.println("未完成...");
}
System.out.println("value="+futureTask.get());
}
}