随笔分类 -  开发语言 / java之多线程

摘要:线上percona是5.5.31版本 springboot启动提示连接mysql报错:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required 我们看到mysql连接依赖的jar包mysql-connect 阅读全文
posted @ 2020-10-23 18:23 igoodful 阅读(13501) 评论(0) 推荐(0)
摘要:想想一下这样一个场景,有多个人需要过河,河上有一条船,船要等待满10个人才过河,过完河后每个人又各自行动。 这里的人相当于线程,注意这里,每个线程运行到一半的时候,它就要等待一个条件,即船满过河的条件,之后每个线程才能继续执行。使用CyclicBarrier就可以实现这个需求 一. CyclicBa 阅读全文
posted @ 2018-09-26 10:11 igoodful 阅读(447) 评论(0) 推荐(0)
摘要:方法 阅读全文
posted @ 2018-08-29 09:36 igoodful 阅读(174) 评论(0) 推荐(0)
摘要:点多 阅读全文
posted @ 2018-08-28 13:23 igoodful 阅读(269) 评论(0) 推荐(0)
摘要:点多 阅读全文
posted @ 2018-08-28 13:11 igoodful 阅读(152) 评论(0) 推荐(0)
摘要:一、ReentrantLock类中的方法解读。 1、lock方法。实现了接口Lock中的lock方法。这里实际上是调用了sync成员变量的lock方法来实现。所以取决于sync的实现。 2、unlock方法。实现了接口Lock中的unlock方法。这里实际上是调用了sync成员变量的release方 阅读全文
posted @ 2018-08-28 12:58 igoodful 阅读(205) 评论(0) 推荐(0)
摘要:一、简介。 ReentrantLock 是一个互斥锁,在基本行为和机制上与synchonized一样,只不过synchonized用方法和声明访问了隐式的锁监视器,但是ReentrantLock 做了功能上的扩展。ReentrantLock 被最后一个成功lock,但是还没unlock的线程拥有。当 阅读全文
posted @ 2018-08-28 12:55 igoodful 阅读(224) 评论(0) 推荐(0)
摘要:点多 阅读全文
posted @ 2018-08-28 09:54 igoodful 阅读(254) 评论(0) 推荐(0)
摘要:一、成员变量。 1、目录。 2、state。该变量标记为volatile,说明该变量是对所有线程可见的。作用在于每个线程改变该值,都会马上让其他线程可见,在CAS(可见锁概念与锁优化)的时候是必不可少的。在AQS类中,不会直接操作这个值,而是交由它的子类去操作和定义他的作用。 ########### 阅读全文
posted @ 2018-08-28 09:37 igoodful 阅读(197) 评论(0) 推荐(0)
摘要:一、AbstractQueuedSynchronizer类介绍。 该抽象类有两个内部类,分别是静态不可继承的Node类和公有的ConditionObject类。AbstractQueuedSynchronizer的核心实现是一个双向队列,队列中的每一个元素是一个Node。Node是AbstractQ 阅读全文
posted @ 2018-08-23 09:22 igoodful 阅读(212) 评论(0) 推荐(0)
摘要:一、Lock源码。 1、是一个接口。一共有6个方法。 2、方法详细如下: (1)当前线程尝试获取锁。结果分两种情况,一是成功获取到锁,则返回;二是获取锁失败,则一直等待。不响应中断请求。 (2)当前线程释放掉自己所占用的锁。同时唤醒这个锁上的一个等待线程。(两个任务) (3)当前线程尝试以非公平的方 阅读全文
posted @ 2018-08-22 16:58 igoodful 阅读(277) 评论(0) 推荐(0)
摘要:##################################################################### 我们知道多线程操作共享资源时,会出现三个问题:可见性、有序性以及原子性。 一般情况下,我们采用synchronized同步锁(独占锁、互斥锁),即同一时间只有一 阅读全文
posted @ 2018-08-17 16:58 igoodful 阅读(478) 评论(0) 推荐(0)
摘要:一、CMPXCHG汇编指令详解。 这条指令将al\ax\eax\rax中的值与首操作数比较: 1.如果相等,第2操作数的直装载到首操作数,zf置1。(相当于相减为0,所以0标志位置位) 2.如果不等, 首操作数的值装载到al\ax\eax\rax,并将zf清0 二、举例说明。 例如: CMPXCHG 阅读全文
posted @ 2018-08-17 16:01 igoodful 阅读(4346) 评论(0) 推荐(0)
摘要:一、动画演示。 1、https://www.scss.tcd.ie/Jeremy.Jones/vivio/caches/MESIHelp.htm 2、https://www.jianshu.com/p/81770751c11c #################################### 阅读全文
posted @ 2018-08-17 14:35 igoodful 阅读(2740) 评论(0) 推荐(4)
摘要:一.内存模型的相关概念。 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比 阅读全文
posted @ 2018-08-14 16:50 igoodful 阅读(185) 评论(0) 推荐(0)
摘要:短短的 阅读全文
posted @ 2018-08-14 16:29 igoodful 阅读(211) 评论(0) 推荐(0)
摘要:党的 阅读全文
posted @ 2018-08-14 16:25 igoodful 阅读(254) 评论(0) 推荐(0)
摘要:1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 先看一段代码,假如线 阅读全文
posted @ 2018-08-14 11:19 igoodful 阅读(805) 评论(0) 推荐(0)
摘要:一、重排序。 1、为什么需要重排序? 现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。 指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执行 阅读全文
posted @ 2018-08-14 10:55 igoodful 阅读(722) 评论(0) 推荐(0)
摘要:创建和启动线程 在java中创建一个线程如下: Thread thread = new Thread(); 调用方法start()来启动一个线程: thread.start(); 这个例子没有指定线程执行任何代码,线程将会在启动之后停止。 有两种方式指定线程应该执行什么代码。第一种方式就是创建一个T 阅读全文
posted @ 2018-08-12 22:30 igoodful 阅读(186) 评论(0) 推荐(0)