这几天一直在看多线程相关的东西,今天写了个多线程读取文件并行计算然后汇总数据的demo,发现在IDEA中Thread.activeCount()
的值不是理想的1。
直接上码:
public static void main(String[] args) {
List<String> contents = readFile();
int lineCount = contents.size();
Demo d = new Demo(lineCount);
// 多线程小汇总数据
for (int i = 0; i < lineCount; i++) {
final int j = i;
new Thread(new Runnable() {
@Override
public void run() {
d.calc(contents.get(j), j);
}
}).start();
}
// 等待小汇总任务完成
while (Thread.activeCount() > 1) {
}
// 汇总总数据
d.sum();
}
在debug模式下是理想的,执行完所以的小汇总数据任务后才执行sum(),可在run的时候死活不执行。我jconsole
和jvisualVM
查看了线程也没看出个所以然。stackoverflow搜索,原来是idea的锅,再看线程确实有Monitor Ctrl-Break
最后,可以使用CountDownLatch
来实现多线程通信。
撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。