有关程序或小项目的任何建议,以了解Java中的并发性?

jju*_*uma 13 java concurrency multithreading

我的目标是了解Java中的并发性.目前我的知识水平很差.我很确定我知道"易变"的意思.我有点知道"同步"意味着什么.有时.我从来没有编写启动线程或管理它们的代码.在这个问题之外,我有信心并且在家里使用Java工作.

我正在寻找一个小项目或程序的建议,这需要理解并发性才能正确有效地工作.

Jul*_*ang 12

写一个矩阵乘法算法.并行化它.优化它.了解它如何扩展,特别是如果你有一个多核机器.这将是一个有趣的项目.


dfa*_*dfa 10

尝试使用各种策略的数独解析器:

  • 3个主题:1个用于行,1个用于列,1个用于子方块
  • 9个线程:3个用于行(每个3行1个线程),3个用于列,3个用于子方块
  • 27个线程:9行(每行1个线程)等

  • 解决谜题还有一个额外的负担,这会分散对并发编程原理的理解. (6认同)

B.E*_*.E. 9

如果你真的刚开始那么生产者 - 消费者问题可能是一个好的开始:

http://en.wikipedia.org/wiki/Producer-consumer_problem

不要读太多,因为维基百科文章也包含问题的解决方案:-)


Rsh*_*Rsh 5

我同意 @Julien 关于 mtrix 乘法的观点。在这个问题中,使用线程带来的改进更加明显。
但正如 @dfa 所说,我不同意数独。这不够明智
例如这是我在线程中编写 Matrix-Mul 的结果

 %        self                        
time    seconds   name    
32.38    10.72    Simple
21.29    7.05     Tiling
15.58    5.16     SimpleThread
9.63     3.19     ThreadTiling
Run Code Online (Sandbox Code Playgroud)

这是 1000*1000 矩阵相乘的结果。你可以很容易地看出多少线程可以提高你的程序速度。(平铺是一种用于增强缓存命中的技术)

之后,当您熟悉语法时,您可能会陷入经典问题。它们可能更具挑战性,但它可以帮助您熟悉解决并发问题的模式。
我建议看一下关于信号量的小书。它非常全面,可以帮助您掌握这些问题背后的想法。

  • 这本书真的非常有用,谢谢。 (2认同)