首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:线程技术与概念

Java:线程技术与概念
EN

Stack Overflow用户
提问于 2008-10-10 08:48:41
回答 4查看 3.3K关注 0票数 6

在使用线程时,我有时会将它们想象为在空间上下文中将对象之间的3维或更多维度的相互关联编织在一起。这不是一个通用的用例场景,但对于我所做的工作来说,这是思考它的一个有用的方法。

您是否使用任何API来帮助线程处理?

您是否以一种不将线程概念化为进程的方式使用线程?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-10 09:39:54

,您是否使用了一些API来帮助线程处理?

您的意思是从java.util.concurrent获得一些有助于并发编程的构造,如启动这里的多部分教程所描述的那样。

您使用线程的方式没有将线程概念化为进程吗?

是的,在某种程度上,线程根本没有概念化。以异步任务运行器为例。它在封面下使用线程,但我没有看到它们,我也不关心它们。他们完全由任务负责人管理.

在幕后,这都是线程,但当我们不再关心单个线程,而只是把它们看作是一些插槽,您可以将代码放入其中,并让代码运行一段时间,这时我们就开始达到更高的抽象级别。

代理/执行者是一种常见的方法。Actor就像一个有一个状态块的线程,然后您可以发送一些代码,并说“在有时间时对您的状态执行此操作”或类似的内容。

票数 13
EN

Stack Overflow用户

发布于 2009-04-01 11:30:11

首先,

通常的免责声明:并发编程,在任何语言中,使用任何抽象级别,都是复杂的,并且有许多风险。考虑到:

  • 并发编程使任何应用程序按规模复杂。
  • 单元测试的关键部分是困难的,有时是不可能的。
  • 产生于并发代码的bug是非常困难的,并且很大程度上依赖于体系结构、操作系统风格、版本等。

Java并发API

Java在使开发人员尽可能容易并发编程方面做了很大的工作。在大多数情况下,您将看到java.util.concurrent具有所需的大部分抽象:

  • 可以扩展Runnable接口和Thread对象。只要提交代码,就可以运行线程了。
  • 一组很好的Executors:常量池、动态池、计划或其他什么的。只要向它扔一个Runnable,它就能完成剩下的工作。
  • Semaphore**s锁**各种类型的锁免除了您实现通用锁定技术的需要。
  • 针对所有对象的内置wait()notify() API。

使用

作为软件工程师,唯一留给您的是确保您正在编写正确的代码。这意味着你应该意识到你可能面临的危险情况:

  • 死锁--在这种情况下,两个或多个线程在无序资源上等待,从而形成一个无限等待循环。
  • Livelock -两个或多个线程,它们礼貌地试图在共享资源上让位给对方,但最终却不接受它(假设两个人在走廊上互相走来走去,不断地从一边走到另一边)。
  • 饥饿--单个线程占用单个共享资源的大部分或全部,从而剥夺了其他线程对它的访问。

要点(或,何时使用)

只在并发性直接改善应用程序行为时才使用线程。

如果您正在等待一个IO/网络/硬件绑定资源,DO会在其上生成一个线程,以便您可以继续执行其他工作。

如果您只是想巧妙地拆分CPU绑定的计算,不使用线程.结果可能会让你的表现更糟。

如果您确实使用线程,请确保您已经彻底考虑了风险,并进行了三次检查,您没有错过任何特殊情况。

有用(在线)资源

进入事物的最快方法是做Sun并发教程。除此之外,买一本好书。

祝你好运:)

票数 7
EN

Stack Overflow用户

发布于 2009-04-01 07:41:17

并发性是一个深入而复杂的课题。像Java并发在实践中的应用这样的书可能会有所帮助。

有关线程的API,请参见并发实用程序概述。例如,BlockingQueue可能很有用。

一种队列,它还支持在检索元素时等待队列变为非空的操作,以及在存储元素时等待队列中可用空间的操作。

请参阅CountDownLatch

一种同步辅助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。

CyclicBarrier的一些有趣的行为。

一种同步工具,它允许一组线程都等待对方到达一个共同的障碍点。

编辑:我现在正在实践中阅读Java并发。非常好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/190559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档