一个含有一千万字符串的集合,期望计算每个字符串的 md5 值。并打印出来,不考虑顺序。
这是一个 cpu 密集型操作,如果使用单线程做效率不高,在四核机器上准备开启四个线程做
将集合分成四个子集合,每个线程分配一个子集合,for 循环操作
使用 queue 存储字符串,每个线程从 queue 中获取取单个字符串,操作后再读取下一个。
如果当前有很多 cpu 密集型的小任务,使用多线程时,是每次获取一个(就像线程池读取任务执行那样),还是每次读取一批。哪种更好一点,还是说没有啥差别。
从线程切换,以及 java 中内存模型,对象引用 角度分析
下面这段话是从网上拷贝的,是不是说明方法一一次性传递多个任务到另一个线程更优呢,这样的话这两个线程之间同步的对象应该只有集合本身,而不包含集合内的对象吧???
JMM 模型下的线程间通信:
线程间通信必须要经过主内存。
如下,如果线程 A 与线程 B 之间要通信的话,必须要经历下面 2 个步骤:
1 )线程 A 把本地内存 A 中更新过的共享变量刷新到主内存中去。
2 )线程 B 到主内存中去读取线程 A 之前已更新过的共享变量。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.