- 博客(12)
- 收藏
- 关注
原创 AQS的同步组件应用:CountDownLatch、Cyclicbarrier、Semaphore
同步:并发的线程在某一关键点上可能需要相互等待通知或互通消息,这种机制叫线程同步。他们几个底层实现都是AQS,是jdk并发包里提供的并发工具类,注意,他们是工具类,跟我们平时自己写的或使用的工具类一样,目的是帮助我们处理并发的流程控制或解决我们多线程时遇到的一些问题(如:多线程互相等待通知、模拟并发等)CountDownLatch可以让线程等待其他线程完成操作后自己再干。它跟join类似,可以让主线程暂停子线程先去执行;它又比join灵活,join只能是子线程完全执行完才会通知主线程,cou
2021-12-31 13:00:26 378
原创 mysql 数据库忘记密码
自己的华为云服务器不经常用,mysql数据库经常忘记密码。linux版本号:Linux version 4.15.0-91-generic (buildd@lgw01-amd64-013) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1))mysql版本号:Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)主要还是利用网上说的skip-grant-tables一、修改配置1、改文件主要还
2021-06-29 16:19:21 179
原创 Nginx + upstream prematurely closed connection while reading response header from upstream
问题起因:利用nginx做请求转发,记录请求和响应的参数并输出到日志,发现有些参数没有打印。查询nginx的默认错误日志/logs/error.log发现抱错信息:2021/01/07 16:22:11 [error] 19128#0: 72948 upstream prematurely closed connection while reading response header from upstream, client: ..., server: localhost, request: “POS
2021-01-08 10:46:52 2039 2
原创 AQS的应用:可重入锁和读写锁
一、Lock接口1、Lock Lock跟Synchronized一样,都是用在多线程中用来控制并发,保证共享资源安全的一种同步机制。Synchronized是隐式的加锁/解锁;而Lock是显示的加锁/解锁,也就是说我们使用的时候需要先lock.lock()锁定资源,执行逻辑,用完后在lock.unlock()释放资源。2、特性 Lock有Synchronized没有的特性,这几个特性使我们在开发中更方便灵活 1、非阻塞性获取同步状态。tryLock方法可以立即返回是否获取到同步状态,先尝试
2020-10-11 17:49:04 315
原创 AQS 队列同步器
一、队列同步器AQS AQS是一个为满足同步需求、保障线程安全,构建锁或者其他同步组件的框架或者叫模板、底层实现。我们用它可以实现我们自己像要的同步组件(就像ReentrantLock)。AQS是一个抽象类,使用者需要自定义一个同步器并且继承它,重写它指定的方法(独占式/共享式获取/释放同步状态方法),再将自定义同步器组合在自己定义的同步组件中,当真正用的时候同步组件调自定义同步器的模板方法,模板方法再调我们重写的方法,从设计模式角度来看这是一个很典型的【模板模式】它与锁的区别:锁是应用层,是
2020-10-11 17:48:30 215
原创 synchronized
一、用法synchronized可以用来锁方法和锁代码块。锁方法又可以分成对象锁和类锁,synchronized加在普通方法上就是锁得是当前对象;加在static 的方法上锁的是当前类。锁代码块也可以分成对象锁和类锁,在方法中使用synchronized(object)手动指定锁的对象;synchronized(object.class)锁的是类。类锁跟对象没关系。public class SynchronizedCreat { Object object = new Object();//
2020-09-19 18:33:29 274
原创 volatile
一、内存模型1、关于内存 CPU处理速度很快,但它数据来源于内存,cpu向内存拿数据的这个过程是相对耗时的,这就会造成cpu资源浪费,为了解决这一问题,现在的处理器一般在cpu与内存之间建立多级缓存,一级缓存在cpu里也叫寄存器(高速缓存),当他处理数据时先从寄存器拿,拿不到再去内存里取。目前计算机大部分都是多核cpu,每个cpu都有自己的寄存器,但他们共享内存,当一个cpu改变了他自己缓存里的值并同步到内存后,其他cpu缓存里的值不是最新的,跟内存值不一样,这就是缓存一致性问题。 Jav
2020-09-13 16:49:13 176
原创 Thread 线程
Java天生就是多线程,一个请求过来就可以理解成是一个线程,线程有自己独享的虚拟机栈、本地方法栈、程序计数器,也跟其他线程共享堆内存和方法区。一个新线程的空间是由它的父线程分配的,属性也是随父线程的属性设置。一、创建1、继承Thread类;2、实现Runnable接口3、利用FutureTask 配合传入Callable创建有返回值的线程4、拉姆达表达式创建5、利用线程池二、状态jdk里的线程共有6种状态。一个线程同一时刻只能处于一种状态状态转换:1、刚new出来就是新建状态,调用s
2020-09-09 08:38:28 315
原创 ThreadLocal 原理、源码、内存泄漏
一、ThreadLocal1、ThreadLocal是线程内部一个成员变量,它只属于当前线程,对其他线程不可见。2、线程维护的是ThreadLocal的副本变量,每个线程操作自己的副本变量互不影响,所以不用考虑线程安全性问题。3、简单的理解就是同一个ThreadLocal在不同的线程里调用get()方法得到的value不一样。4、它实现的是同一个线程间的数据共享(隔离的是线程); 锁实现的是不同线程间的数据共享二、应用场景一个我们接触多,容易理解,最可能用到的场景:定义一个成员变量Th
2020-08-31 17:11:49 156
原创 开发工具eclipse(STS)项目报错:Missing artifact sun.jdk:tools:jar:1.8.0
原因: eclipse中的maven插件默认没有引用环境变量,所以找不到jdk的路径,也就找不到tool.jar。解决:1.关闭STS2.在STS的解压目录下找到STS.ini文件,在该文件的-vmargs上面加上-vmD:\Program Files\Java\jdk1.8.0_181\jre\bin\server\jvm.dll注意:D:\Program Files...
2018-12-06 11:09:04 1295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人