java jdk里面的线程池蛮好用的,之前看的时候忽略掉了一个很好玩的类Future, 顺便记录一下, 这方面的博客很多,就不多说了
java Future 设计模式:http://www.2cto.com/kf/201411/351903.html
javaFuture ExecutorService: http://blog.csdn.net/wei369924173/article/details/7992642
java线程池:http://my.oschina.net/u/1398304/blog/376827
这里贴下我的测试代码:
public class Test {
String result;
public static final void main(String argvs[]) throws InstantiationException, IllegalAccessException, InterruptedException, ExecutionException{
ExecutorService services = Executors.newFixedThreadPool(2);
final Test test = (Test) Test.class.newInstance();
Future<Test> future = services.submit(new Runnable(){
public void run() {
test.result = "start";
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();}
test.result = "end";
}
}, test);
//做其他的事情
System.out.println("1: result="+future.get().result); //阻塞方法
}
}
等待一段时间后输出:1:result=end
特别注意的事,future.cancel(boolean)方法, 这个方法参数如果是true,那么正在执行被取消任务的线程的中段标志会被置为true, 换句话说,只有执行任务的时候判断了中断状态,被中断就结束任务,否则任务还会继续执行完
java thread中断:http://blog.csdn.net/sunxing007/article/details/9123363