Java多线程 - 真实世界的用例

时间:2011-11-28 06:12:09

标签: java multithreading

我想研究多线程,但我目前的项目没有这样的机会。有人请指导我应该从哪里开始。我需要实时场景,以便我可以直接跳转到编码。我也是并排阅读。

您能否请参考一些网站进行练习。

6 个答案:

答案 0 :(得分:8)

Google可以将您转到练习教程网站(比我更好)。一个很好的实时场景可能包括以下任何一个(可能看起来很学术,但技能绝对可以转化为练习):

  1. 餐饮哲学家的问题。
  2. 读者/作家问题。
  3. 消费者/生产者问题。
  4. 更具体的一些:

    1. 并发alpha-beta搜索(这非常棘手)。
    2. 任何遗传算法都可以同时实现,因为内存/存储是在线程之间共享的,如果做得正确可能会非常具有挑战性(尝试绘制图像项目的半透明多边形。你可以搜索google)。
    3. 并发数据库访问可能相当有趣。为自己绘制一个场景。
    4. 看看http://projecteuler.net/,其中包含一系列有趣的问题。可以使用线程实现许多问题。
    5. 享受。

答案 1 :(得分:2)

Java有几个问题,只是迫切需要多线程解决方案。我最近打了两个并且解决了:

    如果文件夹中有数千个文件,
  • File.list 会出现可怕的问题。
  • SAXParser.parse 是推送解析器。许多xml用户更喜欢拉解析器,但宁愿不添加另一个库。

使用简单的双线程解决方案可以大大提高这两点。

如果是 File.list ,请在包含特殊File.list的单独帖子中运行FileFilter,该帖子会将呈现给它的所有文件发布到{{1} }。然后可以使用BlockingQueue上的迭代器将文件传递给调用者。如果代码写得正确,递归列出目录的增强是一个简单的补充。

SAXParser.parse 可以以类似的方式从内到外翻转。

我最近完成了这两项工作,并且发现这种经历非常具有启发性。

答案 2 :(得分:2)

当单个线程花费很长时间来完成计算活动时,您应该将其分解为小任务并使用多线程来减少计算时间。

您可以在项目中看到许多用于多线程的用例。

  1. 某些任务可以独立运行而不依赖于其他任务(只需跨越新的Thread或将Runnable/Callable个任务提交到ExecutorService/ThreadPoolExecutor
  2. 当您需要等待完成多个并行任务才能继续执行下一个任务(invokeAll()

    e.g。任务1启动三个独立任务任务2,任务3和任务4,但任务5必须在完成任务2,任务3和任务4后启动。

  3.  Task 1              
    ----->               
             Task 2
             ----->
             Task 3
             ----->
             Task 4
             ----->
                      Task 5
    -------------------------->
    
    1. 系统能够使用多个 CPU核心
    2. 当您有 Fork-Join 任务等用例时(使用:ForkJoinPool
    3. 当你想要显示长计算任务的进度时(进度条可以在一个线程中显示,长计算任务可以由其他线程执行)
    4. 相关帖子:

      How to properly use Java Executor?

      Whether to use invokeAll or submit - java Executor service

      Java's Fork/Join vs ExecutorService - when to use which?

      wait until all threads finish their work in java

答案 3 :(得分:1)

我会看一下disruptor库。这引入了许多先进的多线程概念,一旦你理解它并且可以使用它,你就会比这个主题了解更多。

答案 4 :(得分:1)

由用户级线程模拟的多线程。这些线程在应用程序级而非OS内核级别实现。

这些线程也称为绿色线程,因为新鲜(全新)和年轻(不成熟或成熟)。

真实世界用例

  • 电脑游戏中,汽车,摩托车等对象。它们只是线程。
  • 异步通信可以允许应用程序执行其他任务,而不是等待任务完成。
  • 具有许多可以按任何顺序执行的任务的应用程序通常可以从分布式异步通信中受益。

答案 5 :(得分:0)

我建议你设计以下系统来开始主题:

  1. 电梯(行中3个)考虑以下参数:

    能源消耗,即最近的电梯将取决于您的要求是取决于它是向上移动还是现在用户要求,电梯上的重量

    耗时。

  2. 多个用户可以使用的文件读写器系统:

    Edit/Write/Search/Delete a file