返回顶部

随笔分类 -  Java并发编程实战

摘要:一.死锁 经典的“哲学家进餐”问题很好地描述了死锁状况。5个哲学家去吃中餐,坐在-张圆桌旁。他们有5根筷子(而不是5双),并且每两个人中间放一根筷子。哲学家们时而思考,时而进餐。每个人都需要- -双筷子才能吃到东西,并在吃完后将筷子放回原处继续思考。有些筷子管理算法能够使每个人都能相对及时地吃到东西 阅读全文
posted @ 2021-01-13 22:19 不懒人 阅读(115) 评论(0) 推荐(0) 编辑
摘要:一.在任务与执行策略之间的隐性耦合 1.线程饥饿死锁 在线程池中,如果任务依赖于其他任务,那么可能产生死锁。在单线程的Executor中,如果一个任务将另一个任务提交到同一个Executor,并且等待这个被提交任务的结果,那么通常会引发死锁。第二个任务停留在工作队列中,并等待第一个任务完成,而第一个 阅读全文
posted @ 2021-01-13 17:27 不懒人 阅读(187) 评论(0) 推荐(0) 编辑
摘要:一.任务取消 其中一种协作机制能设置某个“已请求取消(Cancellation Requested)”标志,而任务将定期地查看该标志。如果设置了这个标志,那么任务将提前结束。 @ThreadSafe public class PrimeGenerator implements Runnable { 阅读全文
posted @ 2021-01-13 09:31 不懒人 阅读(602) 评论(0) 推荐(0) 编辑
摘要:一.在线程中执行任务 1.串行的执行任务 在应用程序中可以通过多种策略来调度任务,而其中一些策略能够更好地利用潜在的并发性。最简单的策略就是在单个线程中串行地执行各项任务。下面的SingleThreadWebServer将串行地处理它的任务(即通过80端口接收到的HTTP请求)。 public cl 阅读全文
posted @ 2021-01-10 21:53 不懒人 阅读(419) 评论(0) 推荐(0) 编辑
摘要:一.同步容器类 同步容器类包括Vector和Hashtable。 1.同步容器类的问题 同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保护复合操作。 public class UnsafeVectorHelpers { public static Object getLast(V 阅读全文
posted @ 2021-01-10 18:26 不懒人 阅读(88) 评论(0) 推荐(0) 编辑
摘要:一.设计线程安全的类 分析对象的域,如果对象中所有的域都是基本类型的变量,那么这些域将构成对象的全部状态。 1.收集同步需求 一个类包含两个状态变量,分别表示范围的上界和下届。这些变量必须遵循的约束是,下界值应该小于或等于上界值。类似于这种包含多个变量的不变性条件将带来原子性需求:这些相关的变量必须 阅读全文
posted @ 2021-01-09 22:51 不懒人 阅读(164) 评论(0) 推荐(0) 编辑
摘要:一.可见性 在下面代码中,主线程和读线程都将访问共享变量ready和number。主线程启动读线程,然后将number 设为42,并将ready设为true。读线程一直循环直到发现ready的值变为true,然后输出number 的值。虽然NoVisibility 看起来会输出42,但事实上很可能输 阅读全文
posted @ 2021-01-07 13:43 不懒人 阅读(137) 评论(0) 推荐(0) 编辑
摘要:一.原子性 无状态对象一定是线程安全的,假设我们希望增加一个“命中计数器”来统计所处理的请求数量,一种直观的方法是增加一个long类型的域。 @NotThreadSafe public class UnsafeCountingFactorizer extends GenericServlet imp 阅读全文
posted @ 2021-01-05 14:04 不懒人 阅读(105) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示