publicclassTestThread{publicstaticvoidmain(String[]args)throwsInterruptedException,ExecutionException{ExecutorServiceext=Executors.newFixedThreadPool(1);Futurefut...
public class TestThread {
public static void main(String[] args) throws InterruptedException, ExecutionException{
ExecutorService ext=Executors.newFixedThreadPool(1);
Future future3=ext.submit(new Callable(){
public String call(){
int i=0;
while(i<10){
System.out.println("callable3 running......");
try {
Thread.sleep(3000);
i++;
} catch (InterruptedException e) {
System.out.println("Interrupted task.");
}
}
return "callable3 running";
}
});
Thread.sleep(100);
System.out.println("callable3 cancel=" + future3.cancel(true));
System.out.println("callable3 over");
ext.shutdown();
}
}
返回结果是:
callable3 running......
callable3 cancel=true
callable3 over
Interrupted task.
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
执行了cancle()方法,为啥还是把while循环执行完毕了呢?如果将try/catch模块放在while的外层,确实是只执行一次,System.out.println("callable3 running......");。cancel方法不是直接杀死线程的吗?
展开