- 博客(20)
- 收藏
- 关注
原创 大白话说IO
鸟瞰 IO志坚者,功名之柱也。登山不以艰险而止,则必臻乎峻岭。1. 同步与异步同步请求 方法 A 调用方法 B ,如果方法 B 的处理是同步的,那么在方法 B 处理完之前他不会通知方法 A 的,只有方法 B 处理完之后才会明确的通知方法 A。异步请求 方法 A 调用 方法 B ,方法 B 的处理是异步的,那么方法 B 在接到请求后
2022-02-10 09:27:20
354
原创 并发条件队列之Condition 精讲
1. 条件队列的意义 Condition将Object监控器方法( wait , notify和notifyAll )分解为不同的对象,从而通过与任意Lock实现结合使用,从而使每个对象具有多个等待集。 Lock替换了synchronized方法和语句的使用,而Condition替换了Object监视器方法的使用。 条件(也称为条件队列或条件
2021-01-27 10:35:41
982
1
原创 AQS之ReentrantReadWriteLock写锁
用法1.1 定义一个安全的list集合public class LockDemo {ArrayList<Integer> arrayList = new ArrayList<>();//定义一个集合// 定义读锁ReentrantReadWriteLock.ReadLock readLock = new ReentrantReadWriteLock(true).readLock();// 定义写锁ReentrantReadWriteLock.WriteLoc.
2021-01-22 16:31:51
197
原创 AQS之ReentrantReadWriteLock精讲分析上篇
1.用法1.1 定义一个安全的list集合public class LockDemo { ArrayList<Integer> arrayList = new ArrayList<>();//定义一个集合 // 定义读锁 ReentrantReadWriteLock.ReadLock readLock = new ReentrantReadWriteLock(true).readLock(); // 定义写锁 ReentrantReadWr
2021-01-20 14:04:38
199
原创 一文带你学会AQS和并发工具类的关系2
1.创建公平锁1.使用方式Lock reentrantLock = new ReentrantLock(true);reentrantLock.lock(); //加锁try{ // todo} finally{ reentrantLock.unlock(); // 释放锁}2.创建公平锁在new ReentrantLock(true)的时候加入关键字truepublic ReentrantLock(boolean fair) { sync = fair ? new Fa
2021-01-18 17:33:42
143
2
原创 一文带你学会AQS和并发工具类的关系
1. 存在的意义AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。提供一个框架,用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关的同步器(semaphore等)。 此类旨在为大多数依赖单个原子int值表示状态的同步器提供有用的基础。 子类必须定义更改此状态的受保护方法,并定义该状态对于获取或释放此对象而言意味着什么。 鉴于这些,此类中的其他方法将
2021-01-15 16:23:26
154
原创 Lock锁 精讲
1.为什么需要Lock为什么synchronized不够用,还需要Lock Lock和synchronized这两个最常见的锁都可以达到线程安全的目的,但是功能上有很大不同。 Lock并不是用来代替synchronized的而是当使用synchronized不满足情况或者不合适的时候来提供高级功能的为什么synchronized不够
2021-01-12 18:07:37
741
原创 Synchronized 精讲
1.简介1.1 作用在并发场景中,保证同一时刻只有一个线程对有并发隐患的代码进行操作1.2 错误案例需求:两个线程对 count 变量进行200000次循环增加,预期结果是400000次public class SynchronizedDemo implements Runnable { private static int count = 0; static SynchronizedDemo synchronizedInstance = new SynchronizedDemo
2021-01-11 21:14:46
194
6
原创 volatile 关键字精讲
1.错误案例 通过一个案例引出volatile关键字,例如以下代码示例 : 此时没有加volatile关键字两个线程间的通讯就会有问题public class ThreadsShare { private static boolean runFlag = false; // 此处没有加 volatile public static void main(String[] args) throws Interrupt
2021-01-08 09:56:42
723
3
原创 Java内存模型精讲
1.JAVA 的并发模型共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存中公共状态来进行隐式通信 该内存指的是主内存,实际上是物理内存的一小部分2.JAVA 内存模型的抽象2.1 java内存中哪些数据是线程安全的,哪些是非安全的非线程安全 : 在 java 中所有的实例域、静态域、和数组元素
2021-01-06 15:48:25
162
原创 redis 中 Set Hash Zset 是怎么操作的?
往set中加入一个zhangsan127.0.0.1:16379[3]> sadd set zhangsan(integer) 1 往set中加入一个zhangsan (返回结果:(integer) 0)被去重了127.0.0.1:16379[3]> sadd set zhangsan(integer) 0 获取 set 中的所有成员127.0.0.1:16379[3]> SMEMBERS set 1) "zhangsan" 往set集合中添
2020-07-27 17:59:18
157
原创 手摸手教你 linux 环境搭建 java、Tomcat、MySQL!!!
安装java、Tomcat、MySQL一、安装 Java0、上传jdk 到指定目录1、解压缩并移动到指定目录2、配置环境变量3、验证安装是否成功二、安装 Tomcat1、解压缩并移动到指定目录2、验证安装是否成功三、安装 MySQL1、安装2、启动 MySQL3、查看数据库密码:4、连接数据库5、关于 mysql 密码策略相关参数:6、注意!!!7、远程连接一、安装 Java0、上传jdk 到指定目录1、解压缩并移动到指定目录解压缩:tar -zxvf jdk-8u152-linux-x64.t
2020-06-05 17:59:40
543
原创 手摸手教你配置CentOS7以及配置Redis!!!
从零开始装CentOS以及配置Redis1、新建虚拟机2、稍后再选择你要安装得系统镜像3、选择linux 下得 CentOS 74、给你要安装的虚拟机进行起名字并且选择安装位置5、配置磁盘的大小6、完成7、配置系统的镜像和网络8、配置系统的镜像9、配置系统的网络10、此时可以开机了 安装系统11、选择语言,接下来一步一步的安装就好了 注意一下网络的设置就可以了,把有叹号的选项处理完就可以了,这里由于图太多就不显示了12、安装vim
2020-06-04 15:22:13
1006
原创 Redis 中 List 是怎么操作的?
选择索引为2的数据库127.0.0.1:16379[1]> select 2OK 获取当前2库的所有的key信息127.0.0.1:16379[2]> keys *(empty list or set) 往list中压入值 zhangsan 、lisi 、 wangwu127.0.0.1:16379[2]> LPUSH list zhangsan lisi wangwu(integer) 3 获取 list 中所有的值127.0.0.1:163
2020-05-29 17:33:29
429
原创 Redis只会set 、get会导致什么后果!!!
1、reids 是什么?远程字典调用2、redis能干什么?3、redis-benchmark 一个压力测试工具?图片: https://uploader.shimo.im/f/6AbqTmtVxTGORIaZ.pngredis-benchmark -h localhost -p 16379 -c 100 -n 10000100个并发 每个线程10000次请求====== SET ======10000 requests completed in 0.13 seconds // 每次1000
2020-05-22 20:41:27
954
原创 如何优雅的停止线程?
喔!线程可以这么停止?0、面试场景1、interrupt 停不了?2、interrupt + InterruptedException 能停止么?3、interrupt + throw new RuntimeException() 可以么?4、如何更优雅的停止线程呢?5、interrupt 、isInterrupted、interrupted 你们在干嘛?0、面试场景话说我真的信了,????面试官A:多线程有过了解么?程序员B:有了解面试官A:那线程是如何中断的呢?面试官A:有多少中中断方式
2020-05-15 16:09:34
476
原创 多线程那么多API该怎么用?
线程API应该怎么用1、setPriority 设置线程的优先级2、isDaemon、setDaemon 守护线程API3、线程中断4、isAlive 、join 、线程状态5、activeCount、getName 等简单的API1、setPriority 设置线程的优先级public final void setPriority(int newPriority)说明:setPriority :更改此线程的优先级。 首先调用这个线程的checkAccess方法,没有参数这可能会导致抛出
2020-05-12 22:00:45
391
原创 看完这篇文章你还敢说不知道多线程是什么?
A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.线程就是程序中执行的线程。java虚拟机允许一个应用有多个线程同时执行。Every thread has a priority. Threads with higher priority are e
2020-05-10 23:33:05
420
原创 写这么多年的java代码 , 类是如何加载的你真的知道么?
JVM类加载过程的实战测试1、常量值测试2、静态变量值测试3、创建对象测试4、创建对象数组数据测试5、创建基础类型的数组数据测试6、利用单例模式的例子进行模拟类加载的过程7、测试接口继承时初始化8、测试类继承时初始化一9、测试类继承时初始化二1、常量值测试class ClassLoaderTest { public static final String str = UUID.rando...
2020-05-02 19:38:10
196
原创 JVM 真的很难学么?不、只是你“不敢学”而已
JVM 真的很难学么?不、只是你“不敢学”而已 许多招聘的信息上面都说,要了解jvm、多线程什么的对于 java 程序员来说,这是工作好多年的程序员都不一定能掌握的东西,但是面试就会问啊,你不掌握咋整你说?为什么面试会问呢? 因...
2020-04-28 22:47:30
1492
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人