IntStream.rangeClosed(0, 100).parallel().forEach(x -> {
System.out.println(x);
// Thread safe task
someThreadSafeTask();
});
考虑将 Id 列表附加到某个 URl 并进行 http 调用,我需要将信息保存到应该是线程安全的文件中?如何处理这个?
如果您需要让多个线程写入同一个文件,答案很简单,打开文件,写入您必须执行的所有操作,然后同步关闭它。即使您以某种方式设法让线程按您希望的顺序运行,您仍然会遇到以下问题:
- 其他线程仍需要等待轮到它们运行。
- 每次您都会打开文件、写入文件和关闭文件。这是非常耗时的。
如果您需要写入多个文件,那么您可以实现每个文件队列并让使用者写入相应的文件(但仍然最多您将有 N 个线程,其中 N 是您要写入的不同文件的数量(。