线程执行的任务可以终止吗?
1 个回答
明知不可为而为之就是我最大的诚意夜太#### 1.设置中断 FutureTask提供了cancel(boolean mayInterruptIfRunning)方法来取消任务,并且 如果入参为false,如果任务已经在执行,那么任务就不会被取消。 如果入参为true,如果任务已经在执行,那么会调用Thread的interrupt()方法来设置线程的中断标识,如果线程处于阻塞状态,会抛出InterruptedException异常,如果正常状态只是设置标志位,修改interrupted变量的值。所以如果要取消任务只能在任务内部中调用thread.isInterrupted()方法获取当前线程的中断状态,自行取消。 #### 2.线程的stop方法 线程的stop()方法可以让线程停止执行,释放所有的锁,抛出ThreadDeath这种Error。但是在释放锁之后,没有办法让受这些锁保护的资源,对象处于一个安全,一致的状态。(例如有一个变量a,本来的值是0,你的线程任务是将a++后然后再进行a--。正常情况下任务执行完之后,其他线程取到这个变量a的值应该是0,但是如果之前调用了Thread.stop方法时,正好是在a++之后,那么变量a就会是1,这样其他线程取到的a就是出于不一致的状态。)发布于 2022-02-02 10:59 •IP属地 西藏举报评论收藏
公众号进入网站体验更佳

