【发布时间】:2009-05-04 07:36:54
【问题描述】:
我的目标是学习 Java 中的并发性。目前我的知识水平很差。我很确定我知道“易失性”是什么意思。我有点知道“同步”是什么意思。有时。我从未编写过启动线程或管理线程的代码。在这个问题之外,我对使用 Java 工作感到自信和自在。
我正在为需要了解并发才能正确有效地工作的小型项目或程序寻找建议。
【问题讨论】:
标签: java multithreading concurrency
我的目标是学习 Java 中的并发性。目前我的知识水平很差。我很确定我知道“易失性”是什么意思。我有点知道“同步”是什么意思。有时。我从未编写过启动线程或管理线程的代码。在这个问题之外,我对使用 Java 工作感到自信和自在。
我正在为需要了解并发才能正确有效地工作的小型项目或程序寻找建议。
【问题讨论】:
标签: java multithreading concurrency
写一个矩阵乘法算法。并行化它。优化它。看看它是如何扩展的,特别是如果你有一台多核机器。那将是一个有趣的项目。
【讨论】:
尝试使用各种策略的数独解析器:
【讨论】:
如果你真的刚刚开始,那么生产者-消费者问题可能是一个很好的开始:
http://en.wikipedia.org/wiki/Producer-consumer_problem
不要读太多,因为维基百科的文章也包含解决问题的方法:-)
【讨论】:
我同意@Julien 关于 mtrix multiplication 的观点。在这个问题中,由线程使用引起的改进可能更加明显。
但正如@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
这是一个 1000*1000 矩阵相乘的结果。您可以很容易地看出,多少线程可以提高您的程序速度。 (平铺是一种用于提高缓存命中率的技术)
之后,当您熟悉语法时,您可能会深入研究经典问题。它们可能更具挑战性,但它可以帮助您熟悉解决并发问题的模式。
我建议看看Little book on semaphores。它如此全面,可以帮助您掌握这些问题背后的想法。
【讨论】:
这不是一个完整的项目,但它也包含一些源代码。我认为这对于深入了解线程非常有用。
【讨论】:
如果您是一位经验丰富的程序员,创建一个使用Fix Protocol 来规定股价的小型服务器可能会很有趣。它需要能够处理需要并发的多个客户端(然后你可以学习 Swing 或一些网络技术)。
如果您是初学者,我建议您使用一些更简单的方法,例如带有几个消费者线程的生产者线程,如果您能以图形方式显示该过程,您将获得加分。
【讨论】:
并发和网络的一个常见学习项目是编写一个聊天程序。它类似于 FIX 服务器建议,但您只需传递文本。
【讨论】:
当我在大学阅读并发系统编程时,我们构建了一个视频监控系统 - 一台主 PC,它从一台或多台带有网络摄像头的从属 PC 获取视频数据。我记得那个项目,因为它真的让你了解高效的网络编程、实时问题和 JNI :)
【讨论】:
我强烈推荐Java Concurrency In Practice 这本书作为您选择的任何项目的资源。
【讨论】: