首页 > 编程知识 正文

interrupt to do,thread runnable callable区别

时间:2023-05-06 01:44:17 阅读:106686 作者:3696

interrupt中断这个线程。 调用方法的线程将处于“暂停”状态,并且线程不会停止执行。

调用Object类的wait (,wait )、long )或wait )、int )方法或join )、join )、join )、long、int )方法时线程被阻塞在JUC锁或队列相关类抛出InterruptedException异常之前,将调用以下静态方法interrupted以清除中断状态: 因此,catch必须在出现此异常时重新抛出或重新调用中断。 否则,该线程的中断状态将被丢弃。 例如,如果主线程监听子线程的中断状态并进行不同的处理,子线程抛出此异常并未被正确处理,则主线程无法识别子线程的中断状态)

如果此线程被interruptible channel I/o操作阻止,则通道将关闭,线程将设置为中断状态,并且线程将处于Java.nio.channels.closedbyinterruptexcel

如果线程被java.nio.channels.Selector阻止,则会设置线程中断状态,并立即从选择操作返回,就像调用选择器的wakeup方法一样。

如果上述条件都不成立,则设置该线程的中断状态。

中断未运行的线程没有效果

内部静态方法。 测试当前线程是否被中断。 通过这种方法,可以清除线程的中断状态。 这意味着,如果连续两次调用方法,第二次调用将返回false。 但是,除非当前线程在第一次调用中清除中断状态,然后在第二次调用中检查状态之前再次中断,否则返回false。

此方法返回false,因此将反映线程中断并被忽略。 这是因为在暂停期间线程还没有处于活动状态

publicstaticbooleaninterrupted ((returncurrentthread ).isinterrupted ) ) true; } isInterrupted将测试线程是否被中断。 线程的暂停状态不受此方法的影响。

此方法返回false,因此将反映线程中断并被忽略。 这是因为在暂停期间线程还没有处于活动状态

publicbooleanisinterrupted (({ returnisinterrupted ) ) false; } is interrupted (布尔)

私有关联函数(booleanisinterrupted ); 可以看到interrupted和isInterrupted都调用了内部的本地方法isInterrupted方法。 参数是中断状态是否清晰。

interrupted,isInterrupted的区别: interrupted影响当前线程,而isInterrupted影响调用方法的线程对象。 例如,在主线程main中调用子线程sub的isInterrupted方法,同时调用静态interrupted方法。 isInterrupted作用于子线程sub,interrupted作用于主线程main

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。