Thread
Thread定义了一个线程,
线程借助runnable,callable,future来定义任务,
实现多任务并行处理。
Future,Runnable,Callable
用来定义任务的;
都是为了“任务”服务的。
通常所要制定的“任务”都是放到异步线程中执行的。
Runnable只提供一个没有返回值的run()方法。
Callable提供了一个有返回值的call()方法。
Future和Callable结合使用,Callable提供异步返回结果,Future通过get()方法,获取异步返回结果。
private static long count;
private static Future<?> future;
/**
*
* java.lang.InterruptedException: sleep interrupted
* 当sleep被打断了,抛出异常,因为异常被及时的捕获了,不耽误线程继续指定for循环;
*
* 只有当线程中任务全部执行完毕,线程自动退出。
*
* 所有,如果线程中任务未执行完成,线程是不可被打断的。
*
* Future提供了一个和线程池结合使用的方式,并且如果需要还可以设置任务终止的标记。
*
* 程序员可以在future任务中,时刻查询future.isCancelled(),决定是否退出线程。
*
*
* @param args
*/
public static void main(String[] args) {
//1、定义线程池
ExecutorService pool = Executors.newFixedThreadPool(8);
//3、提交任务
future = pool.submit(new Runnable() {
@Override
public void run() {
for (; ; ) {
System.out.println("loop+" + (++count));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (count > 10) {
future.cancel(true);
}
if (future.isCancelled()){
break;
}
}
}
});
System.out.println("cancel");
//所有任务都执行完成后才会关闭
pool.shutdown();
}