从其他线程

时间:2017-01-26 08:40:50

标签: java multithreading

List<T>传递给附加到List单个线程,并确保此线程的Runnable 已完成执行(我需要在中途中断它并将数据计算到那一点),使用来自调用线程的List是否安全?

我在我的代码中使用了这种方法,它似乎有效,但我不能感觉到我只是幸运,因为我的列表中的数据不易变,列表本身不提供同步访问。

我最好使用Collections.synchronizedList(..)作为累加器并在我需要主线程中的列表时复制内容(在中断计算线程之后)?

代码示例:

List<MyData> accList = new ArrayList<>();
Future<?> compFuture = executor.submit(new ComputationRunnable(accList));
// The Runnable will add elements to the List
compFuture.cancel(true);
// Interrupt is caught in the Runnable and it returns null
// Try Future.get() to see if the Future was correctly cancelled, ignore Exception
compFuture.get();
useList(accList);

1 个答案:

答案 0 :(得分:0)

这是因为列表不是用于多线程的

您可以使用BlockingQueue作为示例....

oracle可以直接找到更多信息: https://docs.oracle.com/javase/tutorial/essential/concurrency/collections.html