【问题标题】:Any suggestions for a program or small project to learn about concurrency in Java? [closed]对程序或小型项目学习 Java 并发有什么建议吗? [关闭]
【发布时间】:2009-05-04 07:36:54
【问题描述】:

我的目标是学习 Java 中的并发性。目前我的知识水平很差。我很确定我知道“易失性”是什么意思。我有点知道“同步”是什么意思。有时。我从未编写过启动线程或管理线程的代码。在这个问题之外,我对使用 Java 工作感到自信和自在。

我正在为需要了解并发才能正确有效地工作的小型项目或程序寻找建议。

【问题讨论】:

    标签: java multithreading concurrency


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 解决难题会带来额外的负担,这会分散对并发编程原理的理解。
      【解决方案3】:

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

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

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

      【讨论】:

      • +1 。 IMO 这是学习线程概念的最佳方法之一。
      • 快速浏览了一下,我可以立即看到我不知道该怎么做。所以它符合要求,我会试一试 - 非常感谢!
      【解决方案4】:

      我同意@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。它如此全面,可以帮助您掌握这些问题背后的想法。

      【讨论】:

      • 这本书真的很有用,谢谢。
      【解决方案5】:

      这不是一个完整的项目,但它也包含一些源代码。我认为这对于深入了解线程非常有用。

      Threading in Java

      【讨论】:

        【解决方案6】:

        如果您是一位经验丰富的程序员,创建一个使用Fix Protocol 来规定股价的小型服务器可能会很有趣。它需要能够处理需要并发的多个客户端(然后你可以学习 Swing 或一些网络技术)。

        如果您是初学者,我建议您使用一些更简单的方法,例如带有几个消费者线程的生产者线程,如果您能以图形方式显示该过程,您将获得加分。

        【讨论】:

          【解决方案7】:

          并发和网络的一个常见学习项目是编写一个聊天程序。它类似于 FIX 服务器建议,但您只需传递文本。

          【讨论】:

            【解决方案8】:

            当我在大学阅读并发系统编程时,我们构建了一个视频监控系统 - 一台主 PC,它从一台或多台带有网络摄像头的从属 PC 获取视频数据。我记得那个项目,因为它真的让你了解高效的网络编程、实时问题和 JNI :)

            【讨论】:

              【解决方案9】:

              我强烈推荐Java Concurrency In Practice 这本书作为您选择的任何项目的资源。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-01-08
                • 1970-01-01
                • 2022-11-27
                • 2010-09-25
                • 1970-01-01
                • 2011-02-21
                • 2014-09-21
                • 1970-01-01
                相关资源
                最近更新 更多