《Java Concurrency in Practice》 学习笔记--第一章:引言

本文详细介绍了Java多线程编程的基础概念、关键应用和实践技巧,包括线程安全、并发优化、性能考量及测试方法。通过解析经典书籍《JavaConcurrencyinPractice》,探讨了提高资源利用率、确保任务公平执行、简化编程复杂度的多线程优势,并通过实例揭示了安全问题、死锁与活琐现象,最后深入剖析了高级主题如原子变量、非阻塞算法和Java内存模型。

        最近一段时间在学习Java多线程编程。学习计划包括阅读《JavaConcurrency in Practice》和研究JDK1.6中的java.util.concurrent包。为了督促自己学习,保证学习效果,我决定做学习笔记,把新知识、他人有益的总结和自己的理解记录下来,最主要的,是读《JavaConcurrency in Practice》的收获。

      《JavaConcurrency in Practice》是Java并发编程方面经典的书目之一,在网上被很多人推荐。书的内容包括以下几块:

  • 并发和线程安全的基本概念

  • 如何构建和组合线程安全类

  • java.util.concurrent包的使用

  • 如何进行性能优化

  • 如何测试并发程序

  • 高级主题,例如原子变量,非阻塞算法以及Java内存模型

        下面就是各章的笔记。

1 引言

1.1 为何要并行运行程序

  • 提高资源利用率。防止处理器空等被I/O或其他原因阻塞的程序。(从计算机自身资源角度考虑)

  • 保证程序运行的公平性。保证后提交的任务也有被执行的机会。所有程序共享计算机资源。(从任务调度角度考虑)

  • 降低编程复杂度。将一个复杂任务分解成多个简单的子任务,每个子任务独立运行,子任务相互协作。(从编程实现角度考虑)

1.2 多线程的优势

  • 充分发挥多核处理器的计算能力(对应1.11点)

  • 简化问题建模,利于编程(对应1.12点)

  • 易于处理异步事件,如WEB服务器处理大量客户端的异步请求。

  • 创建响应时间更短的UI

        异步表示多个进程没有相同的步调,各自独立运行。同步表示多个进程的执行要遵循某种先后顺序,并非“同时”的意思。

1.3 多线程的问题

1) 安全问题

在没有足够同步措施的情况下,多个线程的执行顺序无法预测,程序容易出错。例如程序1-1

@NotThreadSafe

public class UnsafeSequence {

    private int value;

    /** Returns a unique value. */

    public int getNext() {

        return value++;

    }

}

  1. 两个线程AB的可能运行情况如下:

1 UnluckyExecution ofUnsafeSequence.getNext

        AB各自调用了一次getNext(),value的结果应为11。但最终结果为10,发生了错误。

2) Liveness Hazards

        Safetymeans "nothing bad ever happens"whileLiveness means "something good eventually happens”.

        多线程并发可能使系统进入死锁或活琐状态,所有的进程或某些进程无法继续执行。

3)性能问题

        线程的创建、切换和同步会带来额外的性能开销。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值