java线程运行时间过长吗,如何终止运行
public class gggg { public class MRCC implements Callable<Integer>{ public Integer call() throws Exception { int i = 0; i = getI(); return i; } } public static int getI(){ while(true){ //模拟一个调用可能需要很长时间才会返回,或者不返回结果的接口(只是模拟,并且这个调用接口不可以更改) } } public static void main(String[] args) { gggg g = new gggg(); ExecutorService e = Executors.newSingleThreadExecutor(); Future<Integer> f = e.submit(g.new MRCC()); try { f.get(4000, TimeUnit.MILLISECONDS); System.out.println("获得了返回值"); } catch (InterruptedException e1) { System.out.println("中断错误"); } catch (ExecutionException e1) { System.out.println("执行错误"); } catch (TimeoutException e1) { f.cancel(true); System.out.println("超时"); } System.out.println(f.isCancelled() + "," + f.isDone()); System.out.println("关闭"); e.shutdown(); } }
调用一个方法,但是这个方法可能出现长时间无返回值,那么我该怎么结束这个运行超时的线程?
上面代码中用运行过后,线程无法释放,依旧在运行(在eclipse里面测试的时候,打印出“关闭”语句后,程序依然在运行,正常情况下应该是结束的)。
对多线程有点晕头转向了~~又不能强制终结掉Callable类,即使是改用Thread类实现,也无法结束这种类似的线程(我甚至使用了stop()方法),并且Thread方法不能返回值