Java 一个被打断的执行者
我每隔一段时间就要完成一项任务,比如说每3毫秒直到永远。 因此,在x的每个时间点,x+3,x+2*3,…,将调用方法m1的任务。 这一切都将发生在一个班级,比如说某个班级 我可以使用ScheduledThreadPoolExecutor及其scheduleAtFixedRate来执行此操作 但是,在这项计划任务期间,还可以做更多的工作。线程可能通过中断接收新的和未计划的信息。 当它这样做的时候,它必须做一些a。可能会通过scheduleAtFixedRate影响m1在这些计划时间的处理方式。 或者b。可以调用m1本身 在这个预定运行期间,我必须更新certan字段成员,比如SomeClass的field1和field2 一,。我在F行中对field1的值进行的更改是否已看到,即我是否按照我的预期方式递增某个类实例的field1的值 二,。我如何在这里看到对某个类实例的中断? 让anObj成为SomeClass的实例。将在应用程序的其他位置调用anObj.interrupt。当这种情况发生时, 我必须看到它,并在K行中做进一步的事情。我如何才能做到这一点 对执行者来说太新了 蒂亚 //============================= 编辑: 我可以做到以下几点: 将类声明更改为Java 一个被打断的执行者,java,multithreading,interrupt,executor,Java,Multithreading,Interrupt,Executor,我每隔一段时间就要完成一项任务,比如说每3毫秒直到永远。 因此,在x的每个时间点,x+3,x+2*3,…,将调用方法m1的任务。 这一切都将发生在一个班级,比如说某个班级 我可以使用ScheduledThreadPoolExecutor及其scheduleAtFixedRate来执行此操作 但是,在这项计划任务期间,还可以做更多的工作。线程可能通过中断接收新的和未计划的信息。 当它这样做的时候,它必须做一些a。可能会通过scheduleAtFixedRate影响m1在这些计划时间的处理方式。 或
class SomeClass extends Thread {
这使我能够在K行中看到对anObj的中断:
if (SomeClass.this.interrupted());
我知道这不是一个好的做法,尽管我不知道为什么。这是可行的还是有更好的解决方案
//=================================================
编辑-2:
这里的中断不是为了交换信息。只是让线程知道发生了什么。被中断的线程将按照其条件调用的方式从那里开始 中断线程,而不是对象 要执行您想要的操作,最好的选择是取消未来对象
Future<?> future = trd.scheduleAtFixedRate(new Runnable() {
要测试线程是否被中断,可以执行以下操作
if (Thread.currentThread().isInterrupted())
我被谁看见了?在您的版本中,它保证仅对同一线程中F行之后的代码可见。2线程交换数据的最常见和公认的方法是使用BlockingQueue的某些子类,而不是中断。请注意,如果anObj是未启动的线程,那么anObj.interrupt可能不会执行任何操作。此外,将被中断的线程(而不是对象)与ScheduledThreadPoolExecutor中运行的线程不同。如果您只是将其用于通知,那么您可能不会受到影响。旗帜可能更合适。
future.cancel(true);
if (Thread.currentThread().isInterrupted())