- 博客(10)
- 资源 (1)
- 收藏
- 关注
原创 5.JUC整理笔记五之梳理Varhandle(下)
前文综合描述了 Varhandle 以及 Varhandle 能够做的事情,但是要了解并使用 Varhandle 并非是一件容易的事。总的来说,要想很好地使用 Varhandle ,必须先了解plain(普通方式)、opaque、release/acquire、volatile 的区别及使用。结合前面所学习的 jcstress ,本文用 jcsstress 作为并发测试工具来结合一些例子说明 plain、opaque、release/acqiure、volatile的特性。如果不知道 jcstress
2020-06-03 19:04:16
676
原创 mysql单记录也能造成的死锁
最近在开发的时候,在mysql Innodb 引擎下,一条记录记录也能引起锁的事件。场景描述在项目压测的是,突然发现有类似以下的异常发生:com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction at sun.reflect.GeneratedConstructorAcces
2020-05-30 17:11:09
202
原创 我的事务为什么会失效
我的事务为啥会失效?在用Spring的时候,我们经常用过使用@Transactional声明式事务,但是有些时候,@Transactional声明的事务却是没有生效。一个例子。环境数据库为innodb,代码为基于spring的一个demo。Demo代码如下:package jfound.demo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereoty
2020-05-30 17:08:02
229
原创 Spring注入的对象是什么类型
开篇之前,在用spring编码调试的时候,有时候发现被自动注入的对象是原始类的对象,有时候是代理类的对象,那什么时候注入的原始类对象呢,有什么时候注入的是代理类的对象呢?心里就留下了这个疑问。后来再次看spring aop的时候变有了大胆的想法。案例先添加springboot依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot
2020-05-30 17:04:54
296
原创 一文读懂Java注解
什么是注解Java官方文档上说,注解是元数据的一种形式,它提供不属于程序一部分的数据,注解对被注解的代码没有直接的影响。准确上说,注解只不过是一种特殊的注释而已,如果没有解析它的代码,它可能连注释都不如。主要用途注解有很多种中途,其中包括:提供编译器使用信息编译器可以使用这些注解来检查错误或者禁止显示告警,如@Override**、@Deprecated、@SuppressWarnings编译或部署时处理可以通过注解信息生产相关代码,如lombok的**@Data**、@ToStri
2020-05-30 17:03:35
269
原创 深入剖析ThreadLocal原理
描述ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。通常使用静态的变量来维护ThreadLocal 如:static ThreadLocal<String> userIdThreadLocal = new ThreadLocal<String>通常用来保存userId、TransactionId等。spring也很经常用ThreadLocal来保
2020-05-30 17:02:17
150
原创 4.JUC整理笔记四之梳理VarHandle(上)
前面整理完 Unsafe ,不得不去了解下 java.lang.invoke.Varhandle 。如前面文章所说, Unsafe 是不建议开发者直接使用的,因为 Unsafe 所操作的并不属于Java标准,会容易带来一些安全性的问题。JDK9 之后,官方推荐使用 java.lang.invoke.Varhandle 来替代 Unsafe 大部分功能,对比 Unsafe ,Varhandle 有着相似的功能,但会更加安全,并且,在并发方面也提高了不少性能。简介Varhandle是对变量或参数定义的变量
2020-05-30 16:55:16
499
原创 3.JUC整理笔记三之测试工具jcstress
并发测试工具Jcstress使用教程Jcstress 全称 Java Concurrency Stress,是一种并发压力测试工具,可以帮助研究JVM、java类库和硬件中并发的正确性。Wiki地址:https://wiki.openjdk.java.net/display/CodeTools/jcstressWiki中有一个Jcstress的example,可以根据example很方便入门使用jcstress。当然,我们也可以手动创建自己的Jcstress测试工程。Maven例子添加maven依
2020-05-30 16:53:09
1373
2
原创 2.JUC整理笔记二之聊聊volatile
要想学好JUC,还得先了解 volatile 这个关键字。了解 volatile ,我们从一个例子开始吧。本文不会很详细去说java内存模型,只是很简单地学习一下volatile一个例子package jfound.demo;import java.util.concurrent.TimeUnit;public class TaskRunner { private static boolean ready = true; public static void main(String
2020-05-30 16:49:28
166
原创 1.JUC整理笔记一之细说Unsafe
JUC(java.util.concurrent)的开始,可以说是从Unsafe类开始。Unsafe 简介Unsafe在sun.misc 下,顾名思义,这是一个不安全的类,因为Unsafe类所操作的并不属于Java标准,Java的一系列内存操作都是交给jvm的,而Unsafe类却能有像C语言的指针一样直接操作内存的能力,同时也会带来了指针的问题。过度使用Unsafe类的话,会使出错率变得更大,因此官方才命名为Unsafe,并且不建议使用,连注释的没有。而为了安全使用Unsafe,Unsafe类只允许
2020-05-30 16:44:57
180
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人