首页

源码搜藏网

首页 > 开发教程 > 软件工程 >

java并发编程知识要点总结

创建时间:2016-07-23 20:24  

java并发编程

一、关于并发

  1. 并发是什么?
    • 并发是指在同一时间间隔内,有多个程序处于运行状态。当然,同一时刻只有一个程序在运行。与之对应的是并行,并行是指同一时刻有多个程序同时执行(宏观上)
  2. 为什么需要并发?
    • 为了提高系统的资源利用率 和 吞吐量。就好比全班需要填表时,可以发给每个人,然后填完之后在收起来,这样的效率远比一个一个的发,然后等第一个人填完了再发给第二人填写要快的多
  3. 什么是线程安全?
    • 线程作为独立调用的单位,当使用线程实现并发时,由于处理机的调度,可能存在线程安全问题。那什么是线程安全呢,定义为:当多个线程访问某个类是,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,这个类都能表现出正确的行为,则称这个类是线程安全的。

二、并发编程中的3个概念

1.原子性

2.可见性(同步)

3.有序性

三、同步机制

1.内置锁

2.显示锁Lock

a.关于Lock

b.关于AbstractQueueSynchronizer

3.在synchronized 和 ReentrantLock 的选择

4.锁的劣势

  1. 当线程恢复执行时,必须等待其他线程执行完它们的时间片以后,才能被调度指向,在挂起和恢复线程等过程中存在很大的开销,并且通常存在着较长时间的中断
  2. 当一个线程正在等待锁时,它不能做任何其他事情,必须等待锁释放

5.非阻塞同步机制

四、避免使用同步的方式

  1. 线程封闭:也就是在单线程内访问数据
    • 局部变量,其封闭在执行的线程中,位于线程的栈中,其他线程无法访问这个栈
    • ThreadLocal 类,这个类能使线程中的某个值与保存值的对象关联起来,其可以防止对可变的单实例变量或全局变量进行共享。每个线程中有一个 localVariable 变量,这个变量是 一个threadLocalMap 变量,当设置值的时候会获取当前线程的 Map,然后把当前 threadLocal 添加进去,key为当前 threadLocal,value为 资源,然后获取的时候也是获取当前对象的Map,然后进行获取,从而屏蔽了线程的私有变量
  2. 不可变对象:因为不可变对象一定是线程安全。不可变对象必须满足一下条件:
    • 对象创建以后其状态就不能修改
    • 对象的所有域都是final类型
    • 对象是正确创建的(在对象的创建期间,this引用没有逸出)

五、并发容器 & 同步工具类

1.并发容器



参考资料: http://www.cnblogs.com/dolphin0520/p/3923167.html
0
0
   
上一篇:linux目录结详解
下一篇:C#实现简单的AStar寻路算法

相关内容

热门推荐