**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答复。
我们不允许问题寻求书籍,工具,软件库等的建议。您可以编辑问题,以便可以用事实和引用来回答。
3小时前关闭
Improve this question
我想从事多线程工作,但我目前的项目没有这样的机会。有人能指导我从哪里开始吗?我需要真实的的情况下,我可以直接跳到编码。我也是并排阅读的。
你可以参考一些网站来练习吗?
**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答复。
我们不允许问题寻求书籍,工具,软件库等的建议。您可以编辑问题,以便可以用事实和引用来回答。
3小时前关闭
Improve this question
我想从事多线程工作,但我目前的项目没有这样的机会。有人能指导我从哪里开始吗?我需要真实的的情况下,我可以直接跳到编码。我也是并排阅读的。
你可以参考一些网站来练习吗?
6条答案
按热度按时间4ktjp1zp1#
谷歌可以把你转到练习教程网站(比我好得多)。一个很好的真实的场景可以包括以下任何一个(可能看起来很学术,但这些技能绝对可以转移到实践中):
1.吃饭哲学家的问题。
1.读写器问题。
1.消费者/生产者问题。
一些更具体的:
1.并发alpha-beta搜索(这是非常棘手的)。
1.任何遗传算法都可以同时实现,并且由于内存/存储在线程之间共享,如果做得好,可能会非常具有挑战性(尝试绘制图像项目的半透明多边形)。你可以在Google上搜索一下)。
1.并发数据库访问可能相当有趣。为自己勾勒一个场景。
1.看看http://projecteuler.net/,其中包含一堆有趣的问题。这里的许多问题都可以使用线程来实现。
好好享受
r1zk6ea12#
用户级线程模拟的多线程。这些线程在应用程序级别而不是OS内核级别实现。
这些线程也被称为绿色线程,因为,所以新鲜(全新的)和年轻(不成熟或成熟)。
真实的世界用例
*异步通信允许应用程序执行其他任务,而不是等待任务完成。
oknwwptz3#
当单线程花费很长时间来完成计算活动时,您应该将其分解为小任务并使用多线程来减少计算时间。
你可以在你的项目中看到很多多线程的用例。
1.其中一些任务可以独立运行,而不依赖于其他任务(只需跨一个新的
Thread
或提交Runnable/Callable
任务到ExecutorService/ThreadPoolExecutor
)1.当您需要等待多个并行任务完成才能继续下一个任务时(
invokeAll()
)例如,任务1启动三个独立的任务任务任务2、任务3和任务4,但任务5必须在任务2、任务3和任务4完成后启动。
1.系统可使用多个CPU内核
1.当您有类似Fork-Join任务的用例时(用途:ForkJoinPool)
1.当你想显示长时间计算任务的进度时(进度条可以在一个线程中显示,长时间计算任务可以由其他线程执行)
相关文章:
如何正确使用Java Executor?
使用invokeAll还是submit - java Executor服务
Java的Fork/Join vs ExecutorService -何时使用哪个?
等待直到所有线程在java中完成工作
nr7wwzry4#
我想看看disruptor库。这介绍了许多先进的多线程概念,一旦你理解它,并能使用它,你会知道比大多数人在这个问题上。
tjjdgumg5#
Java有几个问题迫切需要多线程解决方案。我最近解决的两个问题是:
*SAXParser.parse是推式解析器。许多xml用户更喜欢pull解析器,但不愿意添加另一个库。
使用简单的双线程解决方案可以大大帮助这两个问题。
如果是File.list,请在单独的线程中运行
File.list
,该线程带有一个特殊的FileFilter
,该线程会将呈现给它的所有文件发布到一个BlockingQueue
。然后可以使用BlockingQueue
上的迭代器将文件传递给调用者。如果代码编写正确,则递归列出目录的增强是一个简单的附加功能。SAXParser.parse也可以用类似的方法进行翻转。
我最近做了这两件事,发现经验非常有启发性。
56lgkhnf6#
我建议您设计以下系统来开始主题:
1.升降舵(行中的3个),考虑以下参数:
能源消耗,即最近的电梯将根据它是否正在向上移动或现在以及用户请求,电梯上的重量来接受您的请求
时间消耗。
1.文件读取器和写入器系统,其中多个用户可以:
Edit/Write/Search/Delete a file