Code-lover's Learning Notes

Keep hungry,Keep foolish

[深入理解Java虚拟机]第十三章 线程安全与锁优化-锁优化

高效并发是从JDK 1.5到JDK 1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightwe...

2015-11-08 23:50:16

阅读数 836

评论数 0

[深入理解Java虚拟机]第十三章 线程安全与锁优化-线程安全

概述在软件业发展的初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维方式直接站在计算机的角度去抽象问题和解决问题,称为面向过程的编程思想。与此相对的是,面向对象的编程思想是站在现实世界的角度去抽象和解决问题...

2015-11-08 22:30:37

阅读数 1263

评论数 0

[深入理解Java虚拟机]第十二章 Java内存模型与线程-Java与线程

并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数都与线程脱不开关系。既然我们这本书探讨的话题是Java虚拟机的特性,那讲到Java线程,我们就从Java线程在虚拟机中的实现开始讲起。线程的实现我们知道,线程是比进程更轻量级的调度执行单位,线程的引入,可以把...

2015-11-08 01:09:59

阅读数 990

评论数 0

java 产生一个Java的内存泄露

我有过一个面试,被问到如何产生一个Java内存泄露。不用说,我感到相当傻,甚至如何产生一个的线索都没有。那么怎么才能产生一个内存泄露呢?解决方案在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中): 应用产生一个长时间运行的线程(或者使用一个线程池加...

2015-10-20 19:44:04

阅读数 496

评论数 0

[Java Concurrency in Practice]第十六章 Java内存模型

Java内存模型一些高层设计问题,例如安全发布,同步策略的规范以及一致性等,它们的安全性都来自于JMM,并且当你理解了这些工作机制的原理后,就能更容易地使用它们。本章将介绍Java内存模型的底层需求以及所提供的保证,此外还将介绍一些高层设计原则背后的原理。16.1 什么是内存模型,为什么需要它假设...

2015-09-12 21:18:45

阅读数 859

评论数 0

[Java Concurrency in Practice]第十五章 原子变量与非阻塞同步机制

原子变量与非阻塞同步机制Java.util.concurrent包中的许多类,如Semaphore 和 ConcurrentLinkedQueue,都提供了比使用synchronized更好的性能和可伸缩性,这些性能提升的原始来源是:原子变量和非阻塞的同步机制。非阻塞算法用底层的原子机器指令(例如...

2015-09-11 14:46:44

阅读数 930

评论数 0

[Java Concurrency in Practice]第十四章 构建自定义的同步工具

构建自定义的同步工具类库中包含了许多存在状态依赖性的类,例如FutureTask、Semaphore和BlockingQueue等。在这些类的一些操作中有着基于状态的前提条件。例如,不能从一个空的队列中上删除元素,或者获取一个尚未结束的任务的计算结果,在这些操作可以执行之前,必须等到队列进入“非空...

2015-09-09 23:44:16

阅读数 580

评论数 0

[Java Concurrency in Practice]第十三章 显式锁

显式锁在Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java 5.0增加了一种新的机制:ReentrantLock。与之前提到过的机制相反,ReentrantLock并不是一种替代内置加锁的方法,而是当内置加锁机制不适用时,作为一种...

2015-09-08 00:47:49

阅读数 912

评论数 0

[Java Concurrency in Practice]第十二章 并发程序的测试

并发程序的测试在测试并发程序时,所面临的主要挑战在于:潜在错误的发生并不具有确定性,而是随机的。要在测试中将这些故障暴露出来,就需要比普通的串行程序测试覆盖更广的范围并且执行更长的时间。在进行安全性测试时,通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致。活跃性测试包括进展测...

2015-09-07 10:23:45

阅读数 1322

评论数 0

[Java Concurrency in Practice]第十一章 性能与可伸缩性

性能与可伸缩性线程的最主要目的是提高程序的运行性能。线程可以使程序更加充分地发挥系统的可用处理能力,从而提高系统的资源利用率。此外,线程还可以使程序在运行现有任务的情况下立即开始处理新的任务,从而提高系统的响应性。首先要保证程序能正确运行,然后仅当程序的性能需求和测试结果要求程序执行得更快时,才应...

2015-09-05 23:48:34

阅读数 948

评论数 0

[Java Concurrency in Practice]第十章 避免活跃性危险

避免活跃性危险在安全性和活跃性之间通常存在着某种制衡。我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁。同样,我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源的死锁。Java应用程序无法从死锁中恢复过来,因此在设计时一定要排除那些可能导致死锁出现...

2015-09-04 01:18:51

阅读数 833

评论数 0

[Java Concurrency in Practice]第九章 图形用户界面应用程序

图形用户界面应用程序为了维持安全性,一些特定的任务必须运行在Swing的事件线程中。然而,在事件线程中不应该执行时间较长的操作,以免用户界面失去响应。而且,由于Swing的数据结构不是线程安全的,因此必须将它们限制在事件线程中。几乎所有的GUI工具包(包括Swing和SWT)都被实现为单线程子系统...

2015-09-01 23:31:15

阅读数 863

评论数 2

java Swing事件分发线程

《FilthyRichClients》读完了前几个章节,现将我的体会结合工作以来从事Swing桌面开发的经验,对本书的一些重要概念进行一次 分析,对书中的一些遗漏与模糊的地方及时补充,同时使读者消除长期以来“Swing性能低、界面丑陋”诸如此类的旧观念。读书笔记仅谈谈我对Swing的 理解,难免会...

2015-08-30 23:48:05

阅读数 578

评论数 0

[Java Concurrency in Practice]第八章 线程池的使用

线程池的使用8.1 在任务与执行策略之间的隐性耦合虽然Executor框架为制定和修改执行策略提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略。有些类型的任务需要明确地执行执行策略,包括:1、 依赖性任务:当线程池中运行任务都是独立的时,我们可以随意地修改池的长度与配置,这不会影响到...

2015-08-30 17:50:10

阅读数 1095

评论数 0

[Java Concurrency in Practice]第七章 取消与关闭

取消与关闭要使任务和线程能安全、快速、可靠地停止下来,并不是一件容易的事。Java没有提供任何机制来安全地终止线程(虽然Thread.stop和suspend方法提供了这样的机制,但由于存在缺陷,因此应该避免使用)。但它提供了中断,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。这种协作...

2015-08-29 09:35:23

阅读数 1098

评论数 0

[Java Concurrency in Practice]第六章 任务执行

任务执行任务就是抽象、离散的工作单元。把一个应用程序的工作分离到任务中,执行与任务的分离,可以简化程序的管理。服务器应用程序应该兼具良好的吞吐量和快速的响应性。6.1 在线程中执行任务当围绕“任务执行”来设计应用程序结构时,第一步就是要找出清晰地任务边界。在理想的情况下,各个任务之间是相互独立:任...

2015-08-25 00:16:18

阅读数 1474

评论数 0

[Java Concurrency in Practice]二至五章小结

下面这个”并发技巧清单“列举了在第一部分(二至五章)中介绍的主要概念和规则。 可变状态是至关重要的(It’s the mutable state,stupid)。 所有的并发问题都可以归结为如何协调对并发状态的访问。可变状态越少,就越容易确保线程安全性。 尽量将域声明为final类型,除非需要它...

2015-08-17 19:17:25

阅读数 652

评论数 0

[Java Concurrency in Practice]第五章 基础构建模块

基础构建模块委托时创建线程安全类的一个最有效的策略,只需让现有的线程安全类管理所有的状态即可。 平台类库中包含了一个并发构建块的丰富集合,如线程安全的容器与同步工具。5.1 同步容器类分两部分,一是JDK1.0的Vector与Hashtable,另一个是JDK1.2才被加入的同步包装类Colle...

2015-08-17 19:04:36

阅读数 1079

评论数 0

[Java Concurrency in Practice]第四章 对象的组合

对象的组合我们并不希望每一次内存访问都进行分析以确保程序时线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序。本章将介绍一些组合模式,这些模式能够将一个类更容易成为线程安全的,并且在维护这些类时不会无意中破坏类的安全性保证。4.1 设计线程安全的类通过使用封装技术,可以使得在不...

2015-08-15 23:16:59

阅读数 703

评论数 0

[Java Concurrency in Practice]第三章 对象的共享

对象的共享第二章介绍了如何通过同步来避免多个线程在同一时刻访问相同的数据,而第三章则介绍如何共享和发布对象,从而使它们能够安全地由多个线程同时访问。这两章合在一起就形成了构建线程安全类以及通过java.util.concurrent类库来构建并发应用程序的重要基础。synchronized不仅仅只...

2015-08-12 22:19:54

阅读数 680

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭