Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中对触发器执行任务_Java_Threadpool - Fatal编程技术网

在Java中对触发器执行任务

在Java中对触发器执行任务,java,threadpool,Java,Threadpool,我有一个任务需要在触发器上执行(比如在需要执行时为该函数传递布尔值true) 为此,可以使用任何线程机制,如Thread、TimerTask或ScheduledThreadPool等。其中请建议最好的方法,所使用的线程或机制必须在任务完成后释放资源,因为触发间隔是波动的。您可以使用,它提供了一个反应式编程API,用于处理可观察到的事件流。这是基于。事件可以是基于时间的(例如,Observable.interval());它们可能来自一个集合(Observable.from(Iterable));

我有一个任务需要在触发器上执行(比如在需要执行时为该函数传递布尔值true)

为此,可以使用任何线程机制,如Thread、TimerTask或ScheduledThreadPool等。其中请建议最好的方法,所使用的线程或机制必须在任务完成后释放资源,因为触发间隔是波动的。

您可以使用,它提供了一个反应式编程API,用于处理可观察到的事件流。这是基于。事件可以是基于时间的(例如,
Observable.interval()
);它们可能来自一个集合(
Observable.from(Iterable)
);或者您可以使用
主题
自己发布它们

例子
//
//注意:为了简洁起见,我使用了Java8语法(lambdas和方法引用)。
//
公共静态void main(字符串[]args)抛出可丢弃的{
System.out.println(“主线程:+Thread.currentThread().getId());
最终倒计时锁存器完成=新倒计时锁存器(1);
最终可观察交易=模拟交易();
交易,其中(t->Math.abs(t.数量)*t.价格>=250000)
.observeOn(Schedulers.threadPoolForIO())
.订阅(
Main::logLargeTrade,
e->{e.printStackTrace();done.countDown();},
完成:倒计时
);
完成。等待();
System.out.println(“完成!”);
}
私有静态可观测模拟器{
最终随机r=新随机();
返回可观察的时间间隔(50L,时间单位毫秒)
.拿(100)
.地图(
新贸易(
立即。现在(),
“AAPL”,
(r.nextInt(9)+1)*100,
500d+r.下一个双倍体()*5d
)
);
}
私有静态无效LoglarGetTrade(贸易t){
System.out.printf(
“[%d:%s]大额交易:%d%s@%f%n”,
Thread.currentThread().getId(),
t、 timestamp.atOffset(ZoneOffset.UTC).toLocalDateTime(),
t、 数量,
t、 符号,
t、 价格
);
}
最终静态类贸易{
最终即时时间戳;
最后一个字符串符号;
最终双倍价格;
最终整数数量;
交易(即时时间、字符串符号、整数数量、双倍价格){
this.timestamp=时间;
这个符号=符号;
这个。数量=数量;
这个价格=价格;
}
}
这里,
交易
是一系列交易事件。我们的触发条件匹配值至少为250000美元的交易,因此我们使用
where()
仅包括与该条件匹配的交易。我们希望触发器操作在线程池上执行,因此我们使用
observeOn()
指定使用线程池的调度程序
subscribe()
创建(您猜到了)对过滤事件流的订阅。这个特殊的重载允许我们将
onNext
onError
onCompleted
回调作为lambda传递

simulateTrades()
方法创建我们订阅的事件流。通常,这些事件将通过消息传递系统传入,或者由流程中的其他组件发布。出于示例的考虑,我只使用一个计时器间隔每秒发布10次交易,并在100次交易后终止