Java并发编程学习
文章平均质量分 96
Java并发编程学习
CodeJiao
须知少年凌云志 曾许天下第一流
展开
-
Java 并发编程 进阶 -- Java并发包中锁原理剖析(LockSupport、抽象同步队列AQS、独占锁ReentrantLock、读写锁ReentrantReadWriteLock)
JDK中的rt.jar包里面的LockSupport是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。AQS借助于两个类:Unsafe(提供CAS操作)和LockSupport(提供park/unpark操作)LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类的方法的线程是不持有许可证的。LockSupport是使用Unsafe类实现的,下面介绍LockSupport中的几个主要函数。如果调用park方法的线程已经拿到了与Loc原创 2022-06-02 18:50:02 · 307 阅读 · 0 评论 -
Java 并发编程 进阶 -- ThreadLocalRandom类原理剖析、原子操作类原理剖析(AtomicLong)、并发List原理剖析(CopyOnWriteArrayList)
ThreadLocalRandom类是JDK 7在JUC包下新增的随机数生成器,它弥补了Random类在多线程下的缺陷。在JDK 7之前包括现在,java.util.Random都是使用比较广泛的随机数生成工具类,而且java.lang.Math中的随机数生成也使用的是java.util.Random的实例。下面先看看java. util.Random的使用方法: 代码(1)创建一个默认随机数生成器,并使用默认的种子。 代码(2)输出10个在0~5(包含0,不包含5)之间的随机数。 随机数的生成需要一个原创 2022-06-02 13:20:17 · 233 阅读 · 0 评论 -
Java 并发编程 -- 并发编程线程基础(线程安全问题、可见性问题、synchronized / volatile 关键字、CAS、Unsafe、指令重排序、伪共享、Java锁的概述)
并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束,而并行是说在单位时间内多个任务同时在执行。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多个任务都是并发执行的,这是因为单个CPU同时只能执行一个任务。在单CPU时代多任务是共享一个CPU的,当一个任务占用CPU运行时,其他任务就会被挂起,当占用CPU的任务时间片用完后,会把CPU让给其他任务来使用,所以在单CPU时代多线程编程是没有太大意义的,并且线程原创 2022-06-02 10:13:48 · 224 阅读 · 0 评论 -
Java 并发编程 -- 并发编程线程基础(线程创建与运行、线程通知与等待、join / sleep / yield方法、线程中断、线程上下文切换、死锁、守护线程与用户线程、ThreadLocal)
Java中的线程分为两类,分别为daemon线程(守护线程)和user线程(用户线程)。在JVM启动时会调用main函数,main函数所在的线程就是一个用户线程,其实在JVM内部同时还启动了好多守护线程,比如垃圾回收线程。那么守护线程和用户线程有什么区别呢?区别之一是当最后一个非守护线程结束时,JVM会正常退出,而不管当前是否有守护线程,也就是说守护线程是否结束并不影响JVM的退出。言外之意,只要有一个用户线程还没结束,正常情况下JVM就不会退出。原创 2022-06-01 22:11:20 · 262 阅读 · 0 评论