Meh*_*Meh 2 java performance multithreading nonblocking
我有一个回调接收一个对象.我复制了这个对象,我必须将它传递给另一个线程进行进一步处理.回调尽可能快地返回非常重要.理想情况下,回调会将副本写入某种无锁容器.
我只有从单个线程和一个处理线程调用的回调.
我只需要将一堆双打传递给另一个线程,我知道双打的最大数量(大约40).
有任何想法吗?我对Java不是很熟悉,所以我不知道在线程之间传递东西的常用方法.
如果这只是一次性的事情 - 你得到40左右的双打,并且想要开始新的线程处理,那么你可以这样做:
public void callback(final double[] myDoubles)
{
new Thread(){
public void run() {
// you can use myDoubles here. it will run on a separate thread.
}}.start()
};
Run Code Online (Sandbox Code Playgroud)
如果这是经常发生的事情,那么您将需要查看线程池并使用java.utils.concurrent.BlockingQueue.尽管名称如此,但队列只有在满员时才会阻止.
您可以创建一个双精度数组,其大小与回调方法放入队列的大小相同.put()操作非常快,因此您的回调方法不会延迟很长时间.(除非队列已满.)
当对象可用时,您的其他线程将使用队列上的take()方法获取对象.take()方法阻塞直到一个对象可用 - 如果你不想这样,但更喜欢保持线程运行,做其他事情,然后使用poll().
最后要考虑的是 - 你是否只想要一个工作线程处理来自回调的双打,或者你想要几个?当一个工作需要一次完成时,有一个线程是有意义的 - 例如,如果将数组写入文件,通常没有多点线程执行此操作.如果在每个数组上完成的工作是独立的,那么它是拥有多个工作线程的一个很好的候选者.
| 归档时间: |
|
| 查看次数: |
9823 次 |
| 最近记录: |