
java
文章平均质量分 60
半路笙歌
一只想成为老鸟的菜鸟
展开
-
JVM中的常量池
目录JVM中的常量池一、class常量池1.1 字面量1.2 符号引用二、字符串常量池三、三种创建字符串的方式(jdk1.7及以上版本)四、字符串常量池的位置JVM中的常量池一、class常量池Class常量池可以理解为是Class文件中的资源仓库。Class文件中除了包含类的版本、字段、方法、接口等信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic Referen原创 2021-12-21 21:00:52 · 718 阅读 · 0 评论 -
并发编程-读写锁上锁流程
并发编程之读写锁上锁流程目录并发编程之读写锁上锁流程一、写锁上锁流程二、读锁上锁流程一、写锁上锁流程/** * 写锁的上锁流程 */@Slf4j(topic = "liheng")public class RWLock2 { //读写锁 static ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); static Lock r = rwl.readLock(); static原创 2021-02-08 16:03:36 · 418 阅读 · 0 评论 -
并发编程-读写锁的读读并发理解
并发编程之读写锁的读读并发的理解代码例子@Slf4j(topic = "liheng")public class Lock2 { //读写锁 static ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); static Lock r = rwl.readLock(); static Lock w = rwl.writeLock(); public static void main(St原创 2021-02-08 15:30:33 · 287 阅读 · 1 评论 -
并发编程-ReentrantLock解锁流程
并发编程之ReentrantLock解锁流程目录并发编程之ReentrantLock解锁流程一、解锁流程二、代码执行流程一、解锁流程情景:线程t1持有锁,t2在park。然后t1释放锁,唤醒t2解锁之前AQS(NonfairSync)的状态。重点关注waitStatus的值和当前线程拥有者。 图1解...原创 2021-02-08 00:07:46 · 286 阅读 · 0 评论 -
并发编程-ReentrantLock非公平锁加锁流程
ReentrantLock之非公平锁加锁流程目录ReentrantLock之非公平锁加锁流程一、非公平锁和AQS的关系二、非公平锁加锁流程2.1 t1第一次加锁2.2 t2第二次加锁2.3 t3来加锁一、非公平锁和AQS的关系二、非公平锁加锁流程2.1 t1第一次加锁final void lock() {//第一次加锁 if条件成立,加锁成功 if (compareAndSetState(0, 1)) setExclusiveOwn原创 2021-02-07 22:33:04 · 207 阅读 · 0 评论 -
并发编程-AQS
并发编程之AQS框架一、定义AQS是AbstactQueuedSynchronizer的简称,它是一个Java提供的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS的主要作用是为Java中的并发同步组件提供统一的底层支持,例如ReentrantLock,CountdowLatch就是基于AQS实现的,用法是通过继承AQS实现其模版方法,然后将子类作为同步组件的内部类。总结:全称是AbstactQueuedSynchronizer 阻塞原创 2021-02-07 19:40:23 · 128 阅读 · 0 评论 -
并发编程-Lock
并发编程之Lock目录并发编程之Lock一、Lock的特点二、基本语法三、代码示例3.1 重入3.2 可打断(lock.lockInterruptibly())3.3 超时3.4 多个条件一、Lock的特点可打断,可重入 可以设置超时时间 可以设置为公平锁 支持多个条件变量 支持读写锁二、基本语法reentrantLock.lock();try{ //todo 临界区}finally{ reentrantLock.unlock(原创 2021-02-06 20:57:53 · 182 阅读 · 0 评论 -
并发编程-保护性暂停模式
并发编程之保护性暂停模式目录并发编程之保护性暂停模式一、定义(Guarded Suspension Design Pattern)二、简单实现三、超时实现四、最终实现一、定义(Guarded Suspension Design Pattern)某个结果需要在多线程之间传递,则可以让这些线程关联到一个对象GuardedObject 但是这个对象需要不断从一个线程到另外一个线程,那么可以使用消息队列 join和future采用的就是这种模式二、简单实现@Slf4j原创 2021-02-06 19:27:47 · 142 阅读 · 0 评论 -
并发编程-wait和sleep
并发编程之wait和sleep的区别一、区别相同点:线程的状态相同,都是阻塞状态不同点:wait是Object的状态,任何对象都可以调用;sleep时Thread的静态方法。原创 2021-02-06 17:15:40 · 478 阅读 · 0 评论 -
并发编程-synchronized的工作模式monitor
并发编程之synchronized的工作模式monitor一、ObjectMonitor原理图二、原理解释持有锁的线程发现条件不足,调用wait,即进入Waitset变为waiting状态 blocked和waiting的线程都处于阻塞状态,不占用cpu时间片 blocked的线程会在持有锁的线程释放锁时被唤醒 waiting线程会在持有锁的线程调用 notify或者notifyAll时唤醒,但唤醒后不意味着立刻获得锁,仍然需要进入EntryList重新竞争...原创 2021-02-06 11:26:18 · 247 阅读 · 0 评论 -
并发编程-锁膨胀
并发编程之锁膨胀前言:记录一下并发编程的学习,做个笔记加深印象。并发编程学习的路神的视频。锁膨胀是针对很对场景而言的,下面主要记录一些常见场景,然后最后总结一下。一、第一次加锁第一次加锁,走匿名偏向锁的流程,产生一个偏向自己的mark,然后调用cas替换头对象,成功则加锁,失败则撤销偏向并且升级轻量级锁。二、第二次偏向加锁2.1 t1把锁释放,t1又来加锁/** t1再次加锁*/synchronized(header){}synchronized(heade原创 2021-01-31 16:55:02 · 180 阅读 · 0 评论 -
并发编程-锁膨胀(预备知识)
并发编程之锁膨胀预备知识前言:记录一下并发编程的学习,做个笔记加深印象。并发编程学习的路神的视频。此篇内容需要对象头的知识,可查看文章https://blog.youkuaiyun.com/yibailiheng/article/details/112857062目录并发编程之锁膨胀预备知识一、无锁二、轻量锁三、Header header = new Header();四、线程加锁synchronized五、线程释放锁(四中的t1释放锁)一、无锁无锁分为两种情况。无锁可.原创 2021-01-30 19:04:27 · 213 阅读 · 2 评论 -
并发编程-公平锁与非公平锁
并发编程之公平锁与非公平锁前言:准备记录一下并发编程的学习,做个笔记加深印象。并发编程学习的路神的视频目录并发编程之公平锁与非公平锁一、问题二、代码示例2.1synchronized实现的锁2.2 lock实现的锁三、公平锁和非公平锁的加锁流程和区别一、问题是否被阻塞的线程被唤醒的顺序不为乱序就是公平锁,反之则为非公平锁?二、代码示例2.1synchronized实现的锁public class TestSysn { private stat..原创 2021-01-30 16:35:11 · 197 阅读 · 1 评论 -
并发编程之-synchronize原理
java 对象头分析前言:准备记录一下并发编程的学习,做个笔记加深印象。并发编程学习的路神的视频。一、为什么学习java的对象头?因为要研究java的内置锁synchronize,就得去研究java的头对象,所谓锁就是给对象一个标识,而这个标识便是存储在对象头中。二、对象头的分析2.1通过jol分析java的对象头布局添加maven依赖<dependency> <groupId>org.openjdk.jol</groupId>原创 2021-01-20 18:48:27 · 373 阅读 · 6 评论 -
小程序的支付和退款(证书相对路径和绝对路径)
前记这里主要是记录一下最近小程序开发支付和退款功能,主要还是实践为主。本文没有涉及mch-id、mch-key和商户证书(用来退款)的申请和下载。相信你做小程序开发一定知道他们什么和怎么申请。其实遇到最大的坑是微信退款的证书在相对路径的还是绝对路径下的问题,先描述一下这个坑,这个坑在下面解决。我们使用的是阿里的SAE部署,所以证书文件我是采用的相对路径存储1.绝对路径:如果你不是容器化部署(不是使用docker镜像或者阿里的SAE),yml文件中key-path你就直接在服务器或者本地的绝对路.原创 2020-06-07 18:22:50 · 4506 阅读 · 2 评论 -
java脚本 打jar包 服务器上命令行运行
记录一下使用java写的处理生产数据库数据的过程。需求描述:由于公司有几个表的数据有一个字段存在问题,具体说就是本来应该存储的是mathml格式的数据,但是现有的数据并不是这个格式。所以,需要将这个字段的数据进行改造,重新保存,为什么要搞这么复杂呢,因为第一、生产库的数据库不能在外网直接连接,不能直接操作。第二、涉及到数学公式格式的转换,不能在存储过程中完成。解决方案(当然这个是我自己...原创 2019-12-30 11:29:49 · 592 阅读 · 0 评论