zl程序教程

您现在的位置是:首页 >  后端

当前栏目

多线程之整体概括

多线程 整体 概括
2023-09-14 08:59:52 时间

 

一.Java并发:多线程和java.util.concurrent并发包总结

二.多线程的体系

三.Java中锁的分类及概念

-------

一.Java并发:多线程和java.util.concurrent并发包总结

引言

前面已经针对Java多线程框架中具体的点介绍了很多了,现在是需要一个概括性总结的时候了,正好从网上找到一张描述java.util.concurrent包组成结构的类图,正好可以对java多线程中并发这块有一个概览性总结。

在转载别人的图之前先简要总结一下:

一、描述线程的类:Runable和Thread都属于java.lang包

二、内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/notifyAll()属于java.lang包

二、提供内存可见性和防止指令重排的volatile属于jvm关键字

四、而java.util.concurrent包(J.U.C)中包含的是java并发编程中有用的一些工具类,包括几个部分:

1、locks部分:包含在java.util.concurrent.locks包中,提供显式锁(互斥锁和速写锁)相关功能;

2、atomic部分:包含在java.util.concurrent.atomic包中,提供原子变量类相关的功能,是构建非阻塞算法的基础;

3、executor部分:散落在java.util.concurrent包中,提供线程池相关的功能;

4、collections部分:散落在java.util.concurrent包中,提供并发容器相关功能;

5、tools部分:散落在java.util.concurrent包中,提供同步工具类,如信号量、闭锁、栅栏等功能;

以下图片转自:这里,文章标题是:深入浅出 Java Concurrency (1) : J.U.C的整体认识

再次感谢画这张图的作者。

12.多线程体系

图片来源:https://yq.aliyun.com/articles/61960?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&utm_content=m_10571

11.Java中锁的分类及概念

file

  • 线程要不要锁住同步资源
    • 悲观锁,又叫互斥同步锁【锁住同步资源】
    • 乐观锁,又叫非互斥同步锁【不锁住同步资源】
  • 多线程能否共享一把锁
    • 共享锁,又叫读锁【多线程可共享一把锁】
    • 独占锁,又叫写锁【多线程不可共享一把锁】
  • 多线程等锁竞争时,是否需要排队
    • 公平锁【需要排队,先排队的先拿到锁】
    • 非公平锁【不需要排队,先尝试插队、失败再排队】
  • 同一个线程是否可以重复获取同一把锁
    • 可重入锁【同一个线程可以重复获取同一把锁】
    • 不可重入锁【同一线程不可一重复拿到同一把锁,即同一线程拿锁也要等到之前的锁释放】
  • 是否可以中断操作
    • 可中断锁【等待锁时可以中断】
    • 非可中断锁【等待锁时不可以中断】
  • 等到的过程、方式
    • 自旋锁【自旋尝试获取锁】
    • 非自旋锁【阻塞等待获取锁】

二. Java多线程系列目录(共43篇)

转载:http://www.cnblogs.com/skywang12345/p/java_threads_category.html

最近,在研究Java多线程的内容目录,将其内容逐步整理并发布。 

(一) 基础篇

01. Java多线程系列--“基础篇”01之 基本概念

02. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式

03. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

04. Java多线程系列--“基础篇”04之 synchronized关键字

05. Java多线程系列--“基础篇”05之 线程等待与唤醒

06. Java多线程系列--“基础篇”06之 线程让步

07. Java多线程系列--“基础篇”07之 线程休眠 

08. Java多线程系列--“基础篇”08之 join()

09. Java多线程系列--“基础篇”09之 interrupt()和线程终止方式

10. Java多线程系列--“基础篇”10之 线程优先级和守护线程

11. Java多线程系列--“基础篇”11之 生产消费者问题

(二) JUC原子类 

12. Java多线程系列--“JUC原子类”01之 框架 

13. Java多线程系列--“JUC原子类”02之 AtomicLong原子类

14. Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类

15. Java多线程系列--“JUC原子类”04之 AtomicReference原子类

16. Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater原子类

 (三) JUC锁

17. Java多线程系列--“JUC锁”01之 框架

18. java多线程之ReentrantLock

19. Java多线程系列--“JUC锁”03之 公平锁(一) 

20. Java多线程系列--“JUC锁”04之 公平锁(二) 

21. Java多线程系列--“JUC锁”05之 非公平锁 

22. Java多线程系列--“JUC锁”06之 Condition条件

23. Java多线程系列--“JUC锁”07之 LockSupport

24. Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock 

25. Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例

26. Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例

27. Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例 

(四) JUC集合

28. Java多线程系列--“JUC集合”01之 框架

29. Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList

30. Java多线程系列--CopyOnWriteArraySet

31. Java多线程系列--“JUC集合”04之 ConcurrentHashMap

32. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

33. Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet

34. Java多线程系列--“JUC集合”07之 ArrayBlockingQueue

35. Java多线程系列--“JUC集合”08之 LinkedBlockingQueue 

36. Java多线程系列--“JUC集合”09之 LinkedBlockingDeque

37. Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue

(五) JUC线程池

38. Java多线程系列--“JUC线程池”01之 线程池架构

39. Java多线程系列--“JUC线程池”02之 线程池原理(一)

40. Java多线程系列--“JUC线程池”03之 线程池原理(二)

41. Java多线程系列--“JUC线程池”04之 线程池原理(三)

42. Java多线程系列--“JUC线程池”05之 线程池原理(四)

43. Java多线程系列--“JUC线程池”06之 Callable和Future

附加内容

《深入理解Java内存模型》读书总结

 

《深入浅出 Java Concurrency》目录http://www.blogjava.net/xylz/archive/2010/07/08/325587.html

这是一份完整的Java 并发整理笔记,记录了我最近几年学习Java并发的一些心得和体会。

  1. J.U.C 整体认识
  2. 原子操作 part 1 从AtomicInteger开始
  3. 原子操作 part 2 数组、引用的原子操作
  4. 原子操作 part 3 指令重排序与happens-before法则
  5. 原子操作 part 4 CAS操作
  6. 锁机制 part 1 Lock与ReentrantLock
  7. 锁机制 part 2 AQS
  8. 锁机制 part 3 加锁的原理 (Lock.lock)
  9. 锁机制 part 4 锁释放与条件变量 (Lock.unlock And Condition)
  10. 锁机制 part 5 闭锁 (CountDownLatch)
  11. 锁机制 part 6 CyclicBarrier
  12. 锁机制 part 7 信号量 (Semaphore)
  13. 锁机制 part 8 读写锁 (ReentrantReadWriteLock) (1)
  14. 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)
  15. 锁机制 part 10 锁的一些其它问题
  16. 并发容器 part 1 ConcurrentMap (1)
  17. 并发容器 part 2 ConcurrentMap (2)
  18. 并发容器 part 3 ConcurrentMap (3)
  19. 并发容器 part 4 并发队列与Queue简介
  20. 并发容器 part 5 ConcurrentLinkedQueue
  21. 并发容器 part 6 可阻塞的BlockingQueue (1)
  22. 并发容器 part 7 可阻塞的BlockingQueue (2)
  23. 并发容器 part 8 可阻塞的BlockingQueue (3)
  24. 并发容器 part 9 双向队列集合 Deque
  25. 并发容器 part 10 双向并发阻塞队列 BlockingDeque
  26. 并发容器 part 11 Exchanger
  27. 并发容器 part 12 线程安全的List/Set CopyOnWriteArrayList/CopyOnWriteArraySet
  28. 线程池 part 1 简介
  29. 线程池 part 2 Executor 以及Executors
  30. 线程池 part 3 Executor 生命周期
  31. 线程池 part 4 线程池任务拒绝策略
  32. 线程池 part 5 周期性任务调度
  33. 线程池 part 6 线程池的实现及原理 (1)
  34. 线程池 part 7 线程池的实现及原理 (2)
  35. 线程池 part 8 线程池的实现及原理 (3)
  36. 线程池 part 9 并发操作异常体系
  37. 并发总结 part 1 死锁与活跃度
  38. 并发总结 part 2 常见的并发场景
  39. 并发总结 part 3 常见的并发陷阱
  40. 并发总结 part 4  性能与伸缩性
  41. 捕获Java线程池执行任务抛出的异常