
Java基础
文章平均质量分 78
love_world_
这个作者很懒,什么都没留下…
展开
-
Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记
第一章 Thread导论为何要用Thread ?非阻塞I/O I/O多路技术 轮询(polling) 信号警告(Alarm)和定时器(Timer)独立的任务(Task)并行算法第二章 Thread的创建与管理一、什么是Thread ? Thread是所在主机执行的应用程序任务(task)。原创 2014-06-12 08:05:35 · 1758 阅读 · 2 评论 -
《Java并发编程实战》第七章 取消与关闭 读书笔记
Java没有提供任何机制来安全地(抢占式方法)终止线程,虽然Thread.stop和suspend等方法提供了这样的机制,但是由于存在着一些严重的缺陷,因此应该避免使用。但它提供了中断Interruption机制,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。一、任务取消取消操作的原因:. 用户请求取消. 有时间限制的操作. 应用程序事件. 错误.原创 2014-05-28 08:02:23 · 2030 阅读 · 0 评论 -
《Java并发编程实战》第八章 线程池的使用 读书笔记
一、在任务与执行策略之间的隐性解耦有些类型的任务需要明确地指定执行策略,包括:. 依赖性任务。依赖关系对执行策略造成约束,需要注意活跃性问题。要求线程池足够大,确保任务都能放入。. 使用线程封闭机制的任务。需要串行执行。. 对响应时间敏感的任务。. 使用ThreadLocal的任务。1. 线程饥饿死锁线程池中如果所有正在执行任务的线程都由于等待其他仍处于工作原创 2014-05-29 08:06:43 · 2080 阅读 · 0 评论 -
《Java并发编程实战》第六章 任务执行 读书笔记
一、 在线程中执行任务无限制创建线程的不足.线程生命周期的开销非常高.资源消耗.稳定性二、Executor框架Executor基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程则相当于消费者。1. Executors 返回 ExecutorService2. ExecutorService方法submit、execute3原创 2014-05-26 07:43:27 · 2067 阅读 · 0 评论 -
《Java并发编程实战》第五章 同步容器类 读书笔记
一、同步容器类1. 同步容器类的问题线程容器类都是线程安全的,但是当在其上进行符合操作则需要而外加锁保护其安全性。常见符合操作包含:. 迭代. 跳转(根据指定顺序找到当前元素的下一个元素). 条件运算迭代问题可以查看之前的文章《Java ConcurrentModificationException 异常分析与解决方案》二、并原创 2014-05-25 08:04:29 · 1732 阅读 · 0 评论 -
Java ConcurrentModificationException 异常分析与解决方案
一、单线程1. 异常情况举例 只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例:使用的数据集合: List myList = new ArrayList(); myList.add原创 2014-03-19 08:22:00 · 33028 阅读 · 8 评论 -
《Java并发编程实战》第四章 对象的组合 读书笔记
一、设计线程安全的类在设计线程安全类的过程中,需要包含以下三个基本要素: . 找出构成对象状态的所有变量。 . 找出约束状态变量的不变性条件。 . 建立对象状态的并发访问管理策略。分析对象的状态,首先从对象的域开始。 变量按作用域划分:. 全局变量. 局部变量. 方法行参. 异常处理参数1. 收集同步需求如果不了解对象的不变性条件原创 2014-05-25 07:28:06 · 1869 阅读 · 0 评论 -
《Java并发编程实战》第二章 线程安全性 读书笔记
一、什么是线程安全性编写线程安全的代码核心在于要对状态访问操作进行管理。共享,可变的状态的访问 - 前者表示多个线程访问, 后者声明周期内发生改变.线程安全性核心概念是正确性。某个类的行为与其规范完全一致。多个线程同时操作共享的变量,造成线程安全性问题。* 编写线程安全性代码的三种方法:不在线程之间共享该状态变量将状态变量修改为不可变的变量在访问原创 2014-05-24 07:52:15 · 1888 阅读 · 0 评论 -
《Java并发编程实战》第十四章 构建自定义的同步工具 读书笔记
一、状态依赖性的管理有界缓存实现的基类@ ThreadSafepublic abstract class BaseBoundedBuffer { @GuardeBy( "this" ) private final E[] buf; @GuardeBy( "this" ) private int tail; @GuardeBy( "this原创 2014-06-03 08:04:42 · 2376 阅读 · 0 评论 -
《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记
一、为什么GUI是单线程化传统的GUI应用程序通常都是单线程的。1. 在代码的各个位置都需要调用poll方法来获得输入事件(这种方式将给代码带来极大的混乱)2. 通过一个“主事件循环(Main Event Loop)”来间接地执行应用程序的所有代码。如果在主事件循环中调用的代码需要很长时间才能执行完成,那么用户界面就会“冻结”,直到代码执行完成。这是因为只有当执行控制权返回到主事件原创 2014-05-30 06:37:14 · 1746 阅读 · 0 评论 -
《Java并发编程实战》第十章 避免活跃性危险 读书笔记
一、死锁所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。百科百科当两个以上的运算单元,双方都在等待对方停止运行,以取得系统资源,但是没有一方提前退出时,这种状况,就称为死锁。维基百科1. 顺序死锁最少有两个锁,一个线程获取到A锁需要获取B锁才能进行操作,而另外一个线程获取到了B锁,需原创 2014-05-30 08:13:22 · 2154 阅读 · 2 评论 -
Java 线程第三版 第三章数据同步 读书笔记
多线程间共享数据问题一、Synchronized关键字 atomic一词与“原子”无关,它曾经被认为是物质的最小的单元,不能再被拆解成更小的部分。 当一个方法被声明成synchronized,要执行此方法的thread必须先取得一个token,我们将它称为锁。一旦该方法取得(或者说是获得)锁,它将运行此方法然后释放掉(或者返回)此锁。不管方法时怎样返回的(包原创 2014-06-13 08:13:55 · 1579 阅读 · 0 评论 -
Java 线程第三版 第八章 Thread与Collection Class 读书笔记
JDK1.2引入最有争议性的改变是将集合类默认为不是Thread安全性的。一、Collection Class的概述1. 具有Threadsafe 的Collection Class:java.util.Vector(List) 列表集合,通过索引操作。java.util.Stack(List) 继承自Vector,提供LIFO的顺序操作push进入,pop出元素。ja原创 2014-06-17 22:25:13 · 1688 阅读 · 0 评论 -
Java 线程第三版 第六章 高级同步议题 读书笔记
多线程数据同步错误比较难检测,因为通常是与事件的特定发生顺序有关。一、同步术语Barrier(屏障) barrier是多个Thread的集合点:所有的Thread都应该到齐在这个barrier之后才能允许它们继续下去。Condition variable(条件变量) 实际上不是变量,而是与某个lock有关联的变量。Event variable(事件变原创 2014-06-17 21:27:58 · 1702 阅读 · 0 评论 -
Java 线程第三版 第五章 极简同步技巧 读书笔记
一、能避免同步吗?取得锁会因为以下原因导致成本很高: 取得由竞争的锁需要在虚拟机的层面上运行更多的程序代码。 要取得有竞争锁的线程总是必须等到锁被释放后。1. 寄存器的效应计算机有一定数量的主寄存器用来存储与程序有关的数据。从逻辑上的观点来看,每个Thread都有自己的一组寄存器。当操作系统将某个Thread分配给CPU时,它会把该Thread特有的信息原创 2014-06-15 20:52:46 · 1846 阅读 · 0 评论 -
《Java并发编程实战》第十二章 并发程序的测试 读书笔记
并发测试大致分为两类:安全性测试(不发生任何错误的行为)和活跃性测试(某个良好的行为终究会发生)。安全测试 - 通常采用测试不变性条件的形式,即判断某个类的行为是否与其他规范保持一致。活跃性测试 - 包括进展测试和无进展测试两个方面。性能测试与活跃性测试相关,主要包括:吞吐量、响应性、可伸缩性。一、正确性测试找出需要检查的不变条件和后延条件。import原创 2014-06-02 21:03:17 · 1846 阅读 · 0 评论 -
Java 线程第三版 第四章 Thread Notification 读书笔记
一、等待与通知public final void wait() throws InterruptedException 等待条件的发生。public final void wait(long timeout) throws InterruptedException 等待条件的发生。如果通知没有在timeout指定的时间内发生,它还是会返回。public fi原创 2014-06-14 09:06:55 · 1885 阅读 · 0 评论 -
《Java并发编程实战》第十一章 性能与可伸缩性 读书笔记
造成开销的操作包括:1. 线程之间的协调(例如:锁、触发信号以及内存同步等)2. 增加的上下文切换3. 线程的创建和销毁4. 线程的调度一、对性能的思考1 性能与可伸缩性运行速度涉及以下两个指标:某个指定的任务单元需要“多快”才能处理完成、计算资源一定的情况下,能完成“多少”工作。可伸缩性:当增加计算资源时(例如:CPU、内存、存储容器或原创 2014-05-31 07:49:04 · 2017 阅读 · 0 评论 -
《Java并发编程实战》第一章 读书笔记
第一章总结名词解释:串行 - 每次只做一个事情.并行 - CPU利用率提高,但是增加编写难度.(?执行顺序不确定)阻塞 - 抢夺所有资源,保证完整高效执行完(java.nio)非阻塞 - GUI线程安全性问题?问题1 线程共享相同的进程内存空间,并且并发运行.(共享变量)?例如:getNext() { return原创 2012-08-23 22:45:16 · 1775 阅读 · 0 评论 -
《Java并发编程实战》第三章 对象的共享 读书笔记
一、可见性什么是可见性?Java线程安全需要防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且需要确保当一个线程修改了对象的状态后,其他线程可以看到发生的状态变化。 后者就是可见性的描述即多线程可以实时获取其他线程修改后的状态。 *** 待补充 两个工人同时记录生产产品总数问题1. 失效数据可见性出现问题就是其他线程没有获取到修改后的状态,更直观原创 2014-05-24 08:44:28 · 1797 阅读 · 0 评论 -
天天记录 - Java 精确计算避免使用float和double
一 问题描述 float和double类型不能用于精确计算,其主要目的是为了科学计算和工程计算,它们执行二进制浮点原酸,目的是为了广泛的数值范围上提供较为精确的快速近似计算而精心设计的。但是如果设计钱币之类的计算需要很精确,所以这种情况不能使用float和double,因为要让其精确表示0.1 或者 10的任何负数次方值是不可能的。二 眼见为实,举例证明: //原创 2013-01-07 22:15:27 · 4430 阅读 · 0 评论 -
《Java并发编程实战》第十六章 Java内存模型 读书笔记
Java内存模型是保障多线程安全的根基,这里仅仅是认识型的理解总结并未深入研究。一、什么是内存模型,为什么需要它Java内存模型(Java Memory Model)并发相关的安全发布,同步策略的规范、一致性等都来自于JMM。1 平台的内存模型在架构定义的内存模型中将告诉应用程序可以从内存系统中获得怎样的保证,此外还定义了一些特殊的指令(称为内存栅栏或栅栏),当原创 2014-06-05 07:58:40 · 2096 阅读 · 2 评论 -
《Java并发编程实战》第十五章 原子变量与非阻塞同步机制 读书笔记
一、锁的劣势锁定后如果未释放,再次请求锁时会造成阻塞,多线程调度通常遇到阻塞会进行上下文切换,造成更多的开销。在挂起与恢复线程等过程中存在着很大的开销,并且通常存在着较长时间的中断。锁可能导致优先级反转,即使较高优先级的线程可以抢先执行,但仍然需要等待锁被释放,从而导致它的优先级会降至低优先级线程的级别。二、硬件对并发的支持处理器填写了一些特殊指令,例如:比较并交换原创 2014-06-04 07:47:20 · 1965 阅读 · 0 评论 -
《Java并发编程实战》第十三章 显示锁 读书笔记
一、Lock与 ReentrantLockLock 提供一种无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显式的。public interface Lock { void lock(); // 获取锁。 void lockInterruptibly() throws InterruptedException;原创 2014-06-02 21:29:04 · 1876 阅读 · 0 评论