在使用线程时,我有时会将它们想象为在空间上下文中将对象之间的3维或更多维度的相互关联编织在一起。这不是一个通用的用例场景,但对于我所做的工作来说,这是思考它的一个有用的方法。
您是否使用任何API来帮助线程处理?
您是否以一种不将线程概念化为进程的方式使用线程?
发布于 2008-10-10 09:39:54
,您是否使用了一些API来帮助线程处理?
您的意思是从java.util.concurrent获得一些有助于并发编程的构造,如启动这里的多部分教程所描述的那样。
您使用线程的方式没有将线程概念化为进程吗?
是的,在某种程度上,线程根本没有概念化。以异步任务运行器为例。它在封面下使用线程,但我没有看到它们,我也不关心它们。他们完全由任务负责人管理.
在幕后,这都是线程,但当我们不再关心单个线程,而只是把它们看作是一些插槽,您可以将代码放入其中,并让代码运行一段时间,这时我们就开始达到更高的抽象级别。
代理/执行者是一种常见的方法。Actor就像一个有一个状态块的线程,然后您可以发送一些代码,并说“在有时间时对您的状态执行此操作”或类似的内容。
发布于 2009-04-01 11:30:11
首先,
通常的免责声明:并发编程,在任何语言中,使用任何抽象级别,都是硬和复杂的,并且有许多风险。考虑到:
Java并发API
Java在使开发人员尽可能容易并发编程方面做了很大的工作。在大多数情况下,您将看到java.util.concurrent具有所需的大部分抽象:
Runnable接口和Thread对象。只要提交代码,就可以运行线程了。Executors:常量池、动态池、计划或其他什么的。只要向它扔一个Runnable,它就能完成剩下的工作。Semaphore**s和锁**各种类型的锁免除了您实现通用锁定技术的需要。wait()和notify() API。使用
作为软件工程师,唯一留给您的是确保您正在编写正确的代码。这意味着你应该意识到你可能面临的危险情况:
要点(或,何时使用)
只在并发性直接改善应用程序行为时才使用线程。
如果您正在等待一个IO/网络/硬件绑定资源,DO会在其上生成一个线程,以便您可以继续执行其他工作。
如果您只是想巧妙地拆分CPU绑定的计算,不使用线程.结果可能会让你的表现更糟。
如果您确实使用线程,请确保您已经彻底考虑了风险,并进行了三次检查,您没有错过任何特殊情况。
有用(在线)资源
进入事物的最快方法是做Sun并发教程。除此之外,买一本好书。
祝你好运:)
发布于 2009-04-01 07:41:17
并发性是一个深入而复杂的课题。像Java并发在实践中的应用这样的书可能会有所帮助。
有关线程的API,请参见并发实用程序概述。例如,BlockingQueue可能很有用。
一种队列,它还支持在检索元素时等待队列变为非空的操作,以及在存储元素时等待队列中可用空间的操作。
请参阅CountDownLatch
一种同步辅助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
和CyclicBarrier的一些有趣的行为。
一种同步工具,它允许一组线程都等待对方到达一个共同的障碍点。
编辑:我现在正在实践中阅读Java并发。非常好。
https://stackoverflow.com/questions/190559
复制相似问题