黑马程序员技术交流社区
标题:
【上海校区】在使用java8并行流的时候的一点问题
[打印本页]
作者:
不二晨
时间:
2018-11-2 09:18
标题:
【上海校区】在使用java8并行流的时候的一点问题
版权声明:本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/zsz459520690/article/details/51957874
import java.util.ArrayList;
import java.util.List;
/**
* <p></p>
*
* @author zhongzhong
* @since 0.1.0
*/
public class Test {
public static void main(String[] args) {
List<String> jobs = new ArrayList<>();
for(int i=0;i<1000;i++){
jobs.add("job-"+i);
}
Person person = new Person();
for(int i=0;i<100;i++) {
jobs.parallelStream().forEach(job ->
person.getJobs().add(job)
);
System.out.println(person.getJobs().size());
person.getJobs().clear();
}
}
}
class Person{
private List<String> jobs=new ArrayList<>();
public List<String> getJobs() {
return jobs;
}
public void setJobs(List<String> jobs) {
this.jobs = jobs;
}
}
1000 1000 1000 1000 1000 997 1000 1000 1000 1000 1000 970 877 678 685 766 765 855 832 789 790 858 778 909 1000 904 767 919 793 913 868 804 1000 732 777 817 721 796 761 746 848 1000 738 795 811 750 905 776 771 819 876 861 900 926 806 773 755 760 821 910 856 835 728 807 824 941 822 825 940 834 822 1000 820 1000 1000 779 988 854 837 801 584 696 964 987 981 802 768 765 796 843 898 898 717 740 630 662 853 910 662 644
会发现输出的list的大小都不一样,这就是没有注意到并行流的问题。
将Person类中的
jobs声明改成如下语句就行了,这是因为ArrayList本身不是线程安全的。
private List<String> jobs=Collections.synchronizedList(new ArrayList<>());
---------------------
【转载】
作者:我是钟钟
原文:
https://blog.csdn.net/zsz459520690/article/details/51957874
作者:
不二晨
时间:
2018-11-7 09:02
ヾ(◍°∇°◍)ノ゙
作者:
魔都黑马少年梦
时间:
2018-11-8 17:00
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2