为什么task2无法完成呢?
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newCachedThreadPool();
Runnable task1 = new Runnable() {
@Override
public void run() {
//do something
System.out.println("i am task1.....");
}
};
Callable<Integer> task2 = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
//do something
return new Integer(100);
}
};
Future<?> f1 = executor.submit(task1);
Future<Integer> f2 = executor.submit(task2);
System.out.println("task1 is completed? " + f1.isDone());
System.out.println("task2 is completed? " + f2.isDone());
//waiting task1 completed while(f1.isDone()){
System.out.println("task1 completed.");
break;
}
//waiting task2 completed
while(f2.isDone()){
System.out.println("return value by task2: " + f2.get());
break;
}
}
} 结果:
i am task1.....
task1 is completed? true
task2 is completed? false
task1 completed.
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newCachedThreadPool();
Runnable task1 = new Runnable() {
@Override
public void run() {
//do something
System.out.println("i am task1.....");
}
};
Callable<Integer> task2 = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
//do something
return new Integer(100);
}
};
Future<?> f1 = executor.submit(task1);
Future<Integer> f2 = executor.submit(task2);
System.out.println("task1 is completed? " + f1.isDone());
System.out.println("task2 is completed? " + f2.isDone());
//waiting task1 completed while(f1.isDone()){
System.out.println("task1 completed.");
break;
}
//waiting task2 completed
while(f2.isDone()){
System.out.println("return value by task2: " + f2.get());
break;
}
}
} 结果:
i am task1.....
task1 is completed? true
task2 is completed? false
task1 completed.
解决方案 »
- 求思路: 根据不同的客户显示不同的swing界面
- myeclipse 没有 refrence libraries
- 求ASCII码和BCD码相互转换的代码!!!!!!!!!!!!!!!
- jdk与jre该如何卸载?(急)
- 请教JAVA实现GIS最短路径输出(带约束条件)
- 谁帮我解释一下这个查询语句?
- 高手帮忙,急!RMI问题:UnicastRemoteObject(int port)怎么用?
- 请问在文本框中用拉方法text.setEchoChar('*');设置成修改显示出来的密码!要还原是怎么做或使用什么方法
- 如何把JAR 文件 制成EXE文件
- 如何利用javascript打开一个程序?
- 关于String类实例方法判断字符是否为汉字;
- 分页查询大多是四表或五表关联是否合理。
所谓的并发,就是无论线程是否完成,主线程都不会等待,主线程动作够快的话你连task1都完成不了。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newCachedThreadPool();
Runnable task1 = new Runnable() {
@Override
public void run() {
//do something
System.out.println("i am task1.....");
}
};
Callable<Integer> task2 = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("i am task2.....");
return new Integer(100);
}
};
Future<?> f1 = executor.submit(task1);
Future<Integer> f2 = executor.submit(task2);
Thread.sleep(500);
System.out.println("task1 is completed? " + f1.isDone());
System.out.println("task2 is completed? " + f2.isDone());
//waiting task1 completed while(f1.isDone()){
System.out.println("task1 completed.");
break;
}
//waiting task2 completed
while(f2.isDone()){
System.out.println("return value by task2: " + f2.get());
break;
}
}
} 然后输出:
i am task1.....
i am task2.....
task1 is completed? true
task2 is completed? true
task1 completed.
return value by task2: 100
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newCachedThreadPool();
Runnable task1 = new Runnable() {
@Override
public void run() {
//do something
System.out.println("i am task1.....");
}
};
Callable<Integer> task2 = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("i am task2.....");
return new Integer(100);
}
};
Future<?> f1 = executor.submit(task1);
Future<Integer> f2 = executor.submit(task2);
//Thread.sleep(500);
while(!(f1.isDone()&&f2.isDone())){
//System.out.println("task1 is completed? " + f1.isDone());
//System.out.println("task2 is completed? " + f2.isDone());
} while(f1.isDone()){
System.out.println("task1 completed.");
break;
}
//waiting task2 completed
while(f2.isDone()){
System.out.println("task2 completed.");
System.out.println("return value by task2: " + f2.get());
break;
}
}
} i am task1.....
i am task2.....
task1 completed.
task2 completed.
return value by task2: 100