java-java并发编程
蜗牛加油快跑
这个作者很懒,什么都没留下…
展开
-
java并发2.2-原子性
1.竞争情况。个人给其下的定义:程序对原创 2014-11-25 16:40:59 · 373 阅读 · 0 评论 -
Java并发编程4.1-设计线程安全的类
1.设计线程安全类的过程应该包括下面3个基本要素:l 确保对象状态是由哪些变量构成的;l 确定限制状态变量的不变约束l 制定一个管理并发访问对象状态的策略注意:如果一个对象的域引用了其他对象,那么它的状态也同时包含了被引用对象的域。2.同步策略(synchronization policy)定义了对象如何协调对其状态的访问,并不会违反它的不变约束或后验条件。它规定了如何把不变性原创 2014-12-14 17:14:14 · 626 阅读 · 0 评论 -
Java并发3.1-可见性-续
1.疑问。对于程序清单3.3,仅仅同步setter是不够的,调用get线程仍然能够看见过期值。(为什么?)(是不是因为同一个对象,两个sychronized块拥有同一个锁,就使的value读同步)2.最低限的安全性。当一个线程在没有同步的情况下读取变量,它可能会得到一个过期值。但是它至少可以看到某个线程在那里设定的一个真实数值,而不是凭空而来的。3.非volatile的long和doubl原创 2014-12-14 17:08:26 · 386 阅读 · 0 评论 -
Java并发编程4.4-向已有的线程安全类添加功能
1.第三个策略是扩展功能,而不是扩展类本身,并将扩展代码置于一个“助手(helper)”类2.(客户端加锁)这里的问题在于同步问题发生在错误(我认为是“不同”)的锁上。但是,通过使用封装容器的内部锁,可以支持客户端加锁。 3.(组合)向已有的类中添加一个原子操作,还有更健壮的选择:组合。4.实施:使用Java监视器模式有效的封装了一个已有的的List ,而且只要我们的类持有底层li原创 2014-12-14 17:14:18 · 497 阅读 · 0 评论 -
Java并发编程实践3.4-不可变性
1.不可变对象。创建后状态不能被修改的东西。2.法则:不可变对象天生就是线程安全的。3.不可变对象: 只有满足如下状态,一个对象才是不可变的: A它的状态不能在创建后再修改; b 所有域都是final类型的;并且, c 它被正确创建(创建期间没有发生this引用的逸出)注意:final修饰的引用(的对象)时,指的是对象不可变(尽管final域指向的对象是可变的,原创 2014-12-14 17:12:54 · 460 阅读 · 0 评论 -
Java并发编程实践3.3-线程封闭
0.法则:线程封闭,会保证线程安全1.栈限制。在栈限制中,只有通过本地变量才可以触及的对象(即,对象的引用只在方法中,编程人员不会发表此引用到方法之外)。 注意:本地的基本类型的变量,你无法尝试去利用栈限制。注意:无论是对象被限制于执行线程的设计需求,还是对“被限制的对象并非线程安全”这一情况的明确知晓,都只有编程人员编码的那一刻。2.ThreadLoad(线程本地变量)。它允许每原创 2014-12-14 17:11:27 · 430 阅读 · 0 评论 -
Java并发编程4.2-实例限制
1. 实例限制 封装了类的线程安全化工作,这 通常 称为“限制”良好实践:将数据封装在对象内部,把对数据的访问限制在对象的方法上,更易确保线程在访问数据时总能获得正确的锁。把限制与各种适当的锁策略相结合,可以确保程序以线程安全的方式使用其他非线程安全对象。 法则:限制性使构造线程安全的类变得更容易,因为类的状态被限制后,分析它的线程安全性时,就不必检查完整的程序。。(被限制对象一定原创 2014-12-14 17:13:45 · 469 阅读 · 0 评论 -
Java并发编程实践3.5-安全发布
1.法则:不可变对象可以在没有额外同步的情况下,安全的用于任意线程,甚至它们时亦不需要同步。?如果final域指向可变对象,那么访问这些对象的状态时仍然需要同步。2.如果一个对象不是不可变的,它就必须被安全地发布,通常发布线程与消费线程都必须同步化。3.法则:为了安全的发布对象,对象的引用以及对象的状态必须同时对其他线程可见。一个正确创建的对象可以通过下列条件安全的发布:l 通过静原创 2014-12-14 17:12:31 · 488 阅读 · 0 评论 -
Java并发3.2-发布和逸出
1.发布的概念:能够使对象在创建它的范围之外的地方所使用。2.逸出的概念:一个对象在尚未准备好时就将它发布。3.发布对象的方式:a) 将对象存储到(赋值)公共静态域。b) 发布一个对象(此对象起容器的作用)还会间接的发布其他对象。c) 从非私有方法返回引用,也能发布返回对象(返回值的方式)。d) 更一般,在已经发布一个对象中,那些非私有域的引用链,和方法调用链中可获得的对象原创 2014-12-14 17:10:20 · 514 阅读 · 0 评论 -
java并发2.5-活跃度与性能
1.弱并发:限制并发调用数量的,并非是可用的处理器资源,而恰恰是应用程序自身。2.你应该谨慎的控制sychronized块不要太小,你不可以将一个原子操作分解到多个sychronized块中。3.法则4:通常简单性和性能之间是相互牵制的。实现同一个策略时 ,不要过早的为了性能而牺牲简单性(从最简单开始,逐步复杂。性能从最差,到次好)4.法则5:有些耗时的操作或计算,如网络或控制台io,原创 2014-11-26 16:44:05 · 386 阅读 · 0 评论 -
java并发1.2-线程的优点
1.拥有多个活跃线程的程序可以同时在多处理器上yx原创 2014-11-25 15:00:28 · 339 阅读 · 0 评论 -
java并发1.3-线程的风险
1.安全危险。线程共享相同的内存地址空间,且并发运行原创 2014-11-25 15:11:17 · 538 阅读 · 0 评论 -
java并发3.1-共享对象Sharing Objects
0.上一章是关于使用同步来防止多个线程同一时间访问同一数据。这一章,详细讲解共享和发布对象的技术。1.可见性。当一个进程修改了对象的状态后,其他进程能够真正看到改变。2.重排序。不能保证cpu操作一定按照程序写定的顺序执行,即使重拍会产生对于其他线程来说,会产生明显的影响。 在没有同步的情况下,编译器、处理器、运行时安排执行的顺序可能完全出乎意料。或者,在没有同步的情况下,尝试推断原创 2014-11-26 16:56:20 · 425 阅读 · 0 评论 -
java并发2.3-锁
1.状态变量相互关联。线程的安全性定义要求无论是多线程中的时序或交替操作,都要保证不破坏那些不变的约束。当一个不变的约束涉及多个变量时,变量之间不是彼此独立的:某个变量的值会制约其他变量的值。因此更新一个变量的时候,要在同一原子操作中更新其他几个。2.法则3:为了保护状态的一致性,要在单一的原子操作中更新相互关联的状态变量。3.锁机制-synchronized块。java提供了强制原子原创 2014-11-26 14:46:54 · 552 阅读 · 0 评论 -
java并发2.4-用锁来保护状态
1.对于每个可被多个线程访问的可变状态变量,如果所有访问它的线程,在执行时,都占用同一个锁,这种情况下,我们称这个变量是有锁保护的。2.每个共享的可变变量,都需要有一个唯一确定的锁保护,而维护者,应该清楚这个锁。3.法则4:对于一个涉及多个变量的不变约束,需要同一个锁保护其所有变量。注:这一节的内容,没有明白作者的意思,感觉乱乱的。原创 2014-11-26 16:24:53 · 569 阅读 · 1 评论 -
java并发1.4-线程无处不在
1.即使你没有显式的创建任何线程,kj原创 2014-11-25 15:27:21 · 267 阅读 · 0 评论 -
java并发2.0-线程安全性引言
1.要编写线程安全的代码,其核心在于对状态的原创 2014-11-25 15:50:08 · 366 阅读 · 0 评论 -
java并发2.1-什么是线程安全性
1.定义:当多个线程访问某个原创 2014-11-25 16:29:08 · 415 阅读 · 0 评论 -
Java并发编程4.5-同步策略的文档化
1.为类的用户编写类线程安全性担保的文档;为类的维护者编写类的同步文档。2.每次使用synchronized,volatile或者任何线程安全类,都表现了一种同步策略,这个策略是你程序设计的一个元素,因此应该将它文档化。原创 2014-12-14 17:15:46 · 452 阅读 · 0 评论