一、cancel 方法 boolean cancel ( boolean mayInterruptIfRunning) ; 参数值 说明 true 如果任务正在执行,中断任务 false 如果任务正在执行,不会中断任务;如果任务还未开始,中断任务
返回值 说明 true 任务取消成功 false 任务取消失败,任务已经完成、已经被取消等
二、cancel 方法实例 1、任务执行中进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { Scanner scanner= new Scanner ( System . in) ; while ( true ) { System . out. println ( "请输入一个整数:" ) ; int num= scanner. nextInt ( ) ; if ( Thread . currentThread ( ) . isInterrupted ( ) ) { System . out. println ( "任务被中断" ) ; break ; } System . out. println ( "输入的整数是:" + num) ; } } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; 调用future.cancel(true),输出结果如下 请输入一个整数: 中断结果:true 12 任务被中断调用future.cancel(false),输出结果如下 请输入一个整数: 中断结果:true 12 输入的整数是:12 请输入一个整数:2、任务执行完成后进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务执行" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; 调用future.cancel(true),输出结果如下 任务执行 中断结果:false调用future.cancel(false),输出结果如下 任务执行 中断结果:false3、任务执行前进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; executorService. submit ( ( ) -> { System . out. println ( "任务 1 开始执行" ) ; try { Thread . sleep ( 5 * 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } System . out. println ( "任务 1 执行完成" ) ; } ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务 2 开始执行" ) ; System . out. println ( "任务 2 执行完成" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; 调用future.cancel(true),输出结果如下 任务 1 开始执行 中断结果:true 任务 1 执行完成调用future.cancel(false),输出结果如下 任务 1 开始执行 中断结果:true 任务 1 执行完成4、任务异常后进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务开始执行" ) ; int a= 10 / 0 ; System . out. println ( "任务执行完成" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; 调用future.cancel(true),输出结果如下 任务开始执行 中断结果:false调用future.cancel(false),输出结果如下 任务开始执行 中断结果:false5、任务中断后进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务开始执行" ) ; try { Thread . sleep ( 5 * 1000 ) ; } catch ( InterruptedException e) { System . out. println ( "任务被中断" ) ; throw new RuntimeException ( e) ; } System . out. println ( "任务执行完成" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean result= future. cancel ( true ) ; System . out. println ( "中断结果:" + result) ; boolean result2= 【在这里再次中断任务】System . out. println ( "再次中断结果:" + result2) ; 调用future.cancel(true),输出结果如下 任务开始执行 任务被中断 中断结果:true 再次中断结果:false调用future.cancel(false),输出结果如下 任务开始执行 任务被中断 中断结果:true 再次中断结果:false小结 - future.cancel(true)future.cancel(false)任务执行前 true true 任务执行中 true true 任务执行完成后 false false 任务异常后 false false 任务中断后 false false
三、isCancelled 方法与 isDone 方法 isCancelled 方法用于检查任务是否被取消 boolean isCancelled ( ) ; isDone 方法用于检查任务是否完成 boolean isDone ( ) ; 四、isCancelled 方法与 isDone 方法实例 1、任务执行中 + 任务执行中进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { Scanner scanner= new Scanner ( System . in) ; while ( true ) { System . out. println ( "请输入一个整数:" ) ; int num= scanner. nextInt ( ) ; if ( Thread . currentThread ( ) . isInterrupted ( ) ) { System . out. println ( "任务被中断" ) ; break ; } System . out. println ( "输入的整数是:" + num) ; } } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean cancelled= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled) ; boolean done= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done) ; boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; boolean cancelled2= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled2) ; boolean done2= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done2) ; 调用future.cancel(true),输出结果如下 请输入一个整数: 任务是否被取消:false 任务是否完成:false 中断结果:true 任务是否被取消:true 任务是否完成:true 12 任务被中断调用future.cancel(false),输出结果如下 请输入一个整数: 任务是否被取消:false 任务是否完成:false 中断结果:true 任务是否被取消:true 任务是否完成:true 12 输入的整数是:12 请输入一个整数:2、任务执行完成后 + 任务执行完成后进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务执行" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean cancelled= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled) ; boolean done= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done) ; boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; boolean cancelled2= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled2) ; boolean done2= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done2) ; 调用future.cancel(true),输出结果如下 任务执行 任务是否被取消:false 任务是否完成:true 中断结果:false 任务是否被取消:false 任务是否完成:true调用future.cancel(false),输出结果如下 任务执行 任务是否被取消:false 任务是否完成:true 中断结果:false 任务是否被取消:false 任务是否完成:true3、任务执行前 + 任务执行前进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; executorService. submit ( ( ) -> { System . out. println ( "任务 1 开始执行" ) ; try { Thread . sleep ( 5 * 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } System . out. println ( "任务 1 执行完成" ) ; } ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务 2 开始执行" ) ; System . out. println ( "任务 2 执行完成" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean cancelled= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled) ; boolean done= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done) ; boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; boolean cancelled2= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled2) ; boolean done2= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done2) ; 调用future.cancel(true),输出结果如下 任务 1 开始执行 任务是否被取消:false 任务是否完成:false 中断结果:true 任务是否被取消:true 任务是否完成:true 任务 1 执行完成调用future.cancel(false),输出结果如下 任务 1 开始执行 任务是否被取消:false 任务是否完成:false 中断结果:true 任务是否被取消:true 任务是否完成:true 任务 1 执行完成4、任务异常后 + 任务异常后进行中断 ExecutorService executorService= Executors . newSingleThreadExecutor ( ) ; Future < ? > future= executorService. submit ( ( ) -> { System . out. println ( "任务开始执行" ) ; int a= 10 / 0 ; System . out. println ( "任务执行完成" ) ; } ) ; try { Thread . sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } boolean cancelled= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled) ; boolean done= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done) ; boolean result= 【在这里中断任务】System . out. println ( "中断结果:" + result) ; boolean cancelled2= future. isCancelled ( ) ; System . out. println ( "任务是否被取消:" + cancelled2) ; boolean done2= future. isDone ( ) ; System . out. println ( "任务是否完成:" + done2) ; 调用future.cancel(true),输出结果如下 任务开始执行 任务是否被取消:false 任务是否完成:true 中断结果:false 任务是否被取消:false 任务是否完成:true调用future.cancel(false),输出结果如下 任务开始执行 任务是否被取消:false 任务是否完成:true 中断结果:false 任务是否被取消:false 任务是否完成:true小结 - isCancelled()isDone()任务执行前 false false 任务执行中 false false 任务执行完成后 false true 任务异常后 false true 任务执行前进行中断 true true 任务执行中进行中断 true true 任务执行完成后进行中断 false true 任务异常后进行中断 false true