美文网首页Java学习笔记程序员安卓资源收集
《java并发编程实战》阅读笔记(一)

《java并发编程实战》阅读笔记(一)

作者: fdwyu | 来源:发表于2016-06-11 17:20 被阅读339次

首先使代码正确运行,然后再提高代码速度。【正确编写并发程序的方法】

线程安全性

  • 知识点
    竞态条件:当某个计算的正确性取决于多个线程的交替执行时序。最常见的竞态条件类型先检查后执行(Check-Then-Act)
    对象的状态
    存储在状态变量(例如实例或静态域)中的数据。
    共享:变量可以由多个线程同时访问;
    可变:变量的值在其生命周期内可以发生变化;
    线程安全性:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码不需要任何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。

无状态对象一定是线程安全的


怎么做到线程安全

  • synchronized

在多个线程访问某个状态变量并且其中有一个线程执行写入时,协同这些线程对变量的访问。
public synchronized int getNext(){return value++;}

  • 避免竞态条件

在某个线程修改变量时,以原子方式执行。
1. 使用现有的线程安全类。例如AtomicLong、AtomicInteger等在java.util.concurrent.atomic包中的原子类。
2. 加锁【互斥锁】机制(java内置的锁机制【同步代码块】)
synchronized(object){// 访问或修改由锁保护的共享状态}:每个java对象都可以用做一个实现同步的锁(可重入)。
3. 对于每个包含多个变量的不变性条件,其中涉及的所有变量都需要由同一个锁来保护。

  • 加锁约定
  1. 将所有的可变状态都封装在对象内部,并通过对象的内置锁对所有访问可变状态的代码路径进行同步。
    2. 尽量将synchronized(lock)控制在合理的大小。
    3.当执行时间较长的计算或者可能无法快速完成的操作时,一定不要持有锁

相关文章

  • Java并发 - Future模式

    标签:原创 Java 并发 更多Java并发实战内容,请参考Java并发 - 并发编程实战 理解Future 关于...

  • Java高并发 -- 并发扩展

    Java高并发 -- 并发扩展 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 死锁 死锁是指...

  • Java高并发--AQS

    Java高并发--AQS 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 AQS是Abstra...

  • Java高并发--安全发布对象

    Java高并发--安全发布对象 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 发布对像:使一...

  • Java高并发 -- 线程池

    Java高并发 -- 线程池 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 在使用线程池后,...

  • Java高并发--消息队列

    Java高并发--消息队列 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 举个例子:在购物商...

  • Java高并发--线程安全策略

    Java高并发--线程安全策略 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 不可变对象 发...

  • Java高并发 -- J.U.C.组件扩展

    Java高并发 -- J.U.C.组件扩展 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 F...

  • 29-CompletionService和ExecutorCom

    CompletionService和ExecutorCompletionService 《Java并发编程实战》一...

  • Java高并发--缓存

    Java高并发--缓存 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 在下图中每一个部分都可...

网友评论

    本文标题:《java并发编程实战》阅读笔记(一)

    本文链接:https://www.haomeiwen.com/subject/fjhblttx.html