62,615
社区成员
发帖
与我相关
我的任务
分享
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Test3 {
private static String testResult(int num) {
System.out.println("begin");
if (1 == num) {
while (true) {
System.out.println("test");
}
} else {
return "12333";
}
}
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask<String> futureTask = new FutureTask<String>(
new Callable<String>() {
public String call() {
return testResult(1);
}
});
executor.execute(futureTask);
String result = null;
try {
result = futureTask.get(100, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
futureTask.cancel(true);
} catch (ExecutionException e) {
futureTask.cancel(true);
} catch (TimeoutException e) {
futureTask.cancel(true);
} finally {
System.out.println("closing...");
executor.shutdown();
System.out.println("closd.");
}
System.out.println("result=" + result);
}
}
thread = new Thread(futureTask);
thread.start();
try {
//exec.execute(thread);
thread.start();
result=task.get(timeLimit,TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
thread.stop();
}
如下代码使用了线程池,但是通过线程池执行以后,stop操作会失效:
thread = new Thread(futureTask);
exec.execute(thread);//exec是newSingleThreadExecutor
try {
thread.start();
result=task.get(timeLimit,TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
thread.stop();
}
求指点,求解脱……[/quote]
将线程池中thread.stop();改中Thread.currentThread().stop();试试!thread = new Thread(futureTask);
thread.start();
try {
result=task.get(timeLimit,TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
thread.stop();
}
如下代码使用了线程池,但是通过线程池执行以后,stop操作会失效:
thread = new Thread(futureTask);
exec.execute(thread);//exec是newSingleThreadExecutor
try {
result=task.get(timeLimit,TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
thread.stop();
}
楼上刚贴的代码有误,重新贴一次thread = new Thread(futureTask);
thread.start();
try {
//exec.execute(thread);
thread.start();
result=task.get(timeLimit,TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
thread.stop();
}
如下代码使用了线程池,但是通过线程池执行以后,stop操作会失效:
thread = new Thread(futureTask);
exec.execute(thread);//exec是newSingleThreadExecutor
try {
thread.start();
result=task.get(timeLimit,TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
thread.stop();
}
求指点,求解脱……