Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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 在使用并行方法时,如何使forEach循环内的单个任务线程安全?_Java_Java Stream - Fatal编程技术网

Java 在使用并行方法时,如何使forEach循环内的单个任务线程安全?

Java 在使用并行方法时,如何使forEach循环内的单个任务线程安全?,java,java-stream,Java,Java Stream,考虑将Id列表附加到某个URl并稍后进行http调用,我需要将信息保存到应该是线程安全的文件中吗?如何处理此问题?如果需要多个线程写入同一文件,答案就是打开该文件,写入所有需要执行的操作,然后同步关闭它。即使您设法使线程按您希望的顺序运行,您仍然会遇到以下问题: 其他线程仍然需要等待轮到它们运行。 每次打开、写入和关闭文件。这非常耗时。 如果需要写入多个文件,则可以实现每个文件队列,并让使用者写入相应的文件,但最多可以有N个线程,其中N是您要写入的不同文件的数量。不要使用并行流。如果我想要并行处

考虑将Id列表附加到某个URl并稍后进行http调用,我需要将信息保存到应该是线程安全的文件中吗?如何处理此问题?

如果需要多个线程写入同一文件,答案就是打开该文件,写入所有需要执行的操作,然后同步关闭它。即使您设法使线程按您希望的顺序运行,您仍然会遇到以下问题:

其他线程仍然需要等待轮到它们运行。 每次打开、写入和关闭文件。这非常耗时。
如果需要写入多个文件,则可以实现每个文件队列,并让使用者写入相应的文件,但最多可以有N个线程,其中N是您要写入的不同文件的数量。

不要使用并行流。如果我想要并行处理的速度,该怎么办?使用您展示的代码,您可能比仅使用普通的循环流慢数倍。考虑到这一点,我有一个用户ID列表,我将其附加到某个URL并进行http调用,我将响应存储到一个文件中。如果不使用并行方法,进程会变慢,那么我应该如何解决这个问题。@shreerangakv:每个HTTP请求是否需要存储到不同的文件中?不,只是将特定的文件记录到单个文件中
IntStream.rangeClosed(0, 100).parallel().forEach(x -> {
    System.out.println(x);
    // Thread safe task
    someThreadSafeTask();
});