![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程学习
我会努力变强的
这个作者很懒,什么都没留下…
展开
-
Java并发包JUC的Lock锁讲解
概述Java有两种锁,一种是使用关键字Synchronized对方法或者代码块进行加锁,一种是使用接口Lock(实际上其实现类)进行上锁和解锁。区别:Synchronized是java的一个关键字,而Lock是一个java类。Synchronized是一个“自动”的“隐式”锁,也就是只要在方法或者代码块上加上该关键字,就会实现自动的上锁和解锁,而Lock是一个非自动的显式锁,上锁和解锁都需要用代码显示指定。如果不显式释放锁,就会造成死锁。Synchronized是可重入、非公平锁。而Lock锁是原创 2020-09-22 09:34:10 · 433 阅读 · 0 评论 -
JUC阻塞队列BlockingQueue讲解
概述阻塞队列有两个特性:阻塞:当队列为空时,会阻塞队列弹出操作,直到队列不为空。当队列满了时,会阻塞入队操作,直到队列不满。队列:FIFO,先进先出。接口:java.util.concurrent.BlockingQueue。实现接口:Collection , Iterable , Queue已知常用实现类:ArrayBlockingQueue :底层为数组的阻塞队列。LinkedBlockingDeque :底层为链表的双端阻塞队列。LinkedBlockingQueue :底层为链表原创 2020-09-22 12:14:45 · 279 阅读 · 0 评论 -
池化技术及jdk的线程池讲解
概述程序运行的本质是消耗资源,比如原创 2020-09-22 20:55:39 · 157 阅读 · 0 评论 -
java并发编程之原子操作类atomic和CAS
概述所谓原子性,就是表示一个获取多个操作,要么全部执行完,要么一个都不执行,不能出现部分成功和部分失败的情况。在多线程中,如果多个线程同时更新一个共享变量,可能会得到一个意料之外的值。比如 i=1 。 A 线程更新 i+1 、B 线程也更新 i+1。通过两个线程并行操作之后可能 i 的值不等于 3。而可能等于 2。因为 A 和 B 在更新变量 i 的时候拿到的 i 可能都是 1这就是一个典型的原子性问题。可以使用synchronized或者Lock来解决上面的原子性问题。但是从jdk1.5开始,在JU原创 2020-11-30 19:12:32 · 498 阅读 · 1 评论 -
java并发编程LockSupport讲解
概述LockSupport是JUC提供的一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,和唤醒线程。主要方法//blocker的作用是在dump线程的时候看到阻塞对象的信息public static void park(Object blocker); // 阻塞当前线程public static void parkNanos(Object blocker, long nanos); // 阻塞当前线程,不过有超时时间的限制public static void parkUn原创 2020-11-26 20:22:22 · 217 阅读 · 0 评论 -
Java并发编程之ReentrantLock原理及AQS原理讲解
概述Lock 在 J.U.C 中是最核心的组件,,锁最重要的特性就是解决并发安全问题。 为什么要以 Lock 作为切入点呢?如果看过 J.U.C 包中的所有组件,一定会发现绝大部分的组件都有用到了 Lock。 所以通过 Lock 作为切入点使得在后续的学习过程中会更加轻松。在 Lock 接口出现之前, Java 中的应用程序对于多线程的并发安全处理只能基于synchronized 关键字来解决。但是 synchronized 在有些场景中会存在一些短板,也就是它并不适合于所有的并发场景。 但是在 Jav原创 2020-11-26 11:15:00 · 2375 阅读 · 1 评论 -
java并发编程之HappenBefore
概述HappenBefore意思表示的是前一个操作的结果对于后续操作是可见的,所以它是一种表达多个线程之间对于内存的可见性。所以我们可以认为在 JMM 中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作必须要存在happens-before 关系。 这两个操作可以是同一个线程,也可以是不同的线程。比如操作1HappenBefore操作2,那么操作1的执行结果对操作2可见。也就是说HappenBefore原则是指导我们写出具有可见性代码的原则。编写的代码符合这些其中一个原则,就是满足可见性的代原创 2020-11-23 20:11:07 · 402 阅读 · 0 评论 -
java synchronized关键字锁和锁类型、锁升级过程讲解
概述synchronized是java的一个关键字,用于对方法或者代码块添加一个同步锁,以实现操作的原子性,保证线程安全性,但是却会带来一些性能上的损耗。这个关键字添加的是可重入锁,也就是同一个线程获取同一把锁时,只需把计数器加一,释放锁时,把计数器减一。计数器为0时表示释放了锁,事实上都是可重入锁。public class SyncDemo { private int num = 0; public void incr(){ num ++; }原创 2020-11-23 19:26:51 · 314 阅读 · 0 评论 -
java并发编程之CompletableFuture
背景在一些业务场景下,可能需要对一些任务进行异步化,以提高系统的吞吐量,在微服务的服务调用场景下显得尤为突出。比如某个接口有五个任务:任务A:执行时间2秒。任务B:执行时间2秒。任务C:执行时间1秒。任务D:执行时间1秒。任务E:执行时间1秒。如果不使用异步任务,使用的是同步任务,那么这个接口的执行总时间至少要7秒中,这在很多场景下是不能接受的。如果使用异步化,前提是这些任务互不相干,也就是各个任务都不依赖于其他任务的执行结果,那就可以使用任务异步来提高吞吐量,接口执行任务A、B、C、原创 2020-09-27 18:45:22 · 588 阅读 · 0 评论 -
Java并发编程之线程安全性分析之原子性、可见性、有序性
一:线程的安全性分析如何理解线程安全:当多个线程访问某个共享对象时,不管运行环境采用何种调度方式,或者这些线程如何交替执行,并且主调代码中不需要任何的额外同步操作或者协同操作,这个类都能表现出正确的行为,那么就称这个类是线程安全的类。正确的行为:就是这个类的执行结果总是符合我们预期的结果,称正确的行为。一:线程不安全导致的原因:线程安全主要有三个问题:原子性:保证一系列操作要么全...原创 2020-03-08 23:16:45 · 161 阅读 · 0 评论 -
java并发编程之正确地终止一个线程interrupt/interrupted
以下demo是错误的终止线程的demo(使用thread.stop()方法实现终止线程):public class ErrorStopThreadDemo { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Overrid...原创 2020-01-22 19:17:05 · 454 阅读 · 0 评论 -
java并发编程之Thread.sleep方法详解
Thread.sleep方法的作用:使当前线程暂停执行一段时间,交出cpu的执行时间片,并且在暂停期间不会参与cpu时间片的获取。直到等待时间结束恢复到就绪状态,是否执行还要看OS的调度,或者在这段时间内被中断。Thread.sleep方法的工作流程:挂起线程并修改其运行状态。用sleep提供的参数设置一个定时器。当时间结束后,定时器会触发,内核收到信号后会修改线程运行状态,例如线程会...原创 2020-01-22 11:18:07 · 3442 阅读 · 1 评论 -
java并发编程之thread.join()方法详解
thread.join()方法的作用:保证线程的执行结果的可见性。原理是通过阻塞主线程实现的。代码Demo如下:public class ThreadJoinDemo { public static volatile boolean flag = false; public static void main(String[] args) throws Interrupted...原创 2020-01-22 10:50:53 · 528 阅读 · 0 评论 -
java并发编程之线程的生命周期详解
java线程从创建到销毁,一共会有6个状态,不一定都经历,有可能只经历部分:NEW:初始状态,线程被创建,但是还没有调用start方法。RUNNABLED:运行状态,java线程把操作系统中的就绪和运行两种状态统一称为“运行中”。就绪状态说明该线程有被执行的资格,等待OS调度,运行状态说明该线程获得了CPU时间片,在执行中。BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种...原创 2020-01-21 17:44:17 · 205 阅读 · 0 评论 -
java并发编程之线程的基本介绍
线程的基本介绍:定义:线程是操作系统能够能够进行运算调度的最小单位,它被包含在进程当中,是进程的实际运作单位。并发和并行的介绍:并发:在一个时间段内能运行多个线程,通过系统的调度交替执行。并行:在某个时刻多个线程同时运行,多核cpu或者多cpu是并行的基本保证。并发如下图:多个线程通过获得cpu的时间片来执行,但同一时刻只有一个线程在运行,多个线程在一段时间内交替执行,由于切换快,所以从...原创 2020-01-21 16:35:48 · 120 阅读 · 0 评论