1.本周思维导图

Java第六周心得体会
JavaSE

2.个人总结

Java虚拟机是一个进程,当中默认包含主线程(Main),可通过代码创建多个独立线程,与Main并发执行

线程的状态:

基本状态

Java第六周心得体会

 等待状态

Java第六周心得体会

阻塞状态

Java第六周心得体会

 注:JDK5之后就绪、运行统称为Runnable

同步规则:

注:只有在调用包含同步代码块的方法,或者同步方法时,才需要对象的锁标记

如调用不包含同步代码块的方法,或普通方法时,则不需要锁标记,可直接调用

已知JDK中线程安全的类:

StringBuffer

Vertor

Hashtable

Callable接口:

publi interface Callable<V>{

         public V call() throws Exception;

 }

  • JDK5加入,与Runnable接口类似,实现之后代表一个线程任务
  • Callable具有泛型返回值、可以声明异常

重入锁:

ReentrantLock:

  • Lock接口的实现类,与synchronized一样具有互斥锁功能

读写锁:

ReentrantReadWriteLock:

  • 一种支持一写多读的同步锁,读写分离,可分别分配读锁、写锁
  • 支持多次分配读锁,使多个读操作可以并发执行

在读操作远远高于写操作的环境中,可在保障线程安全的情况下,提高运行效率

CopyOnWriteArrayList

  • 线程安全的ArrayList,加强版读写分离
  • 使用方法与ArrayList无异

CopyOnWriteArraySet

  • 线程安全的Set底层使用CopyOnWriteArrayList实现
  • 使用addIfAbsent()添加元素,会遍历数组,如存在则不添加

ConcurrentHashMap

  • 使用方式与HashMap无异
  • 不对整个Map加锁,而是为每个Segment加锁
  • 当多个对象存入同一个Segment时,才需要互斥

ConcurrentLinkedQueue

  • 线程安全、可高效读写的队列,高并发下性能最好的队列
  • 无锁、CAS比较交换算法

ArrayBlockingQueue

  • 数组结构实现,有界队列(可固定上限)

 

相关文章: