摘要:
本文主要记录InnoDB存储引擎中锁的关键点,下篇文章通过实例确认加锁的范围。 InnoDB中的锁 1. 锁提供数据完整性和一致性 2. InnoDB行级锁:共享锁(S)和排他锁(X)。 为了支持多粒度锁定,InnoDB支持意向锁,该锁允许事务在行锁和表锁同时存在。包括意向共享锁(IS,为某些记录加 阅读全文
摘要:
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中。奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制。本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内存区域 ③ 介绍JVM中方法调用的机制 1. Java方法调用传参实例解析 Java中参数传递是值传 阅读全文
摘要:
锁的内存语义本质上可以说是对共享变量的更新,能及时让其他线程观察到;并且通过内存屏障,组织编译器或处理器指令重排序,导致多线程下不一致的现象。 1. volatile内存语义 见上一篇文章。 2. 锁的内存语义 (1)锁的释放和获取的内存语义 当线程释放锁时,JMM会将本地内存中的共享变量同步到主内 阅读全文
摘要:
1. Arthas 是Alibaba开源的Java诊断工具 Java动态追踪,对生产环境出现出现bug的情况下,无法调试处理问题,可以借鉴该工具进行问题分析。 原理介绍:Java动态追踪技术探究 Arthas 官网:https://alibaba.github.io/arthas/index.htm 阅读全文
摘要:
Java并发机制的底层原理总结如下: 1. volatile实现原理 (1)由该关键字声明的字段,Java线程内存模型确保所有线程看到这个变量的值是一致的。volatile变量的修改翻译成汇编语言为带LOCK前缀的指令,该指令会发生两件事: ① 将当前处理器缓存行的数据写回系统内存; ② 该写回内存 阅读全文
摘要:
将之前看过的关于并发编程的东西总结记录一下,本文简单记录Java内存模型的相关知识。 1. 并发编程两个关键问题 并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步。 (1)在命令式编程(命令式编程侧重于告诉计算机先做什么后做什么,与声明式只告诉做什么,不告诉怎么做不同)中,线程间 阅读全文
摘要:
提交代码导致冲突,执行merge后,冲掉其他人的提交。需要reset,并新建分支进行恢复解决方法: 1.找到最后一次提交到master分支的版本号,即【merge前的版本号】 2.会退到某个版本号 git reset --hard 【merge前的版本号】 这个时候已经会退到了上一次提交的版本,但是 阅读全文
摘要:
https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-Transactional-NullPointerException 该链接中介绍了demo来说明怎么排查一个@Transactional引起的NullPointerE 阅读全文
摘要:
在前边介绍Socket和ServerSocket连接交互的过程中,读写都是阻塞的。套接字写数据时,数据先写入操作系统的缓存中,形成TCP或UDP的负载,作为套接字传输到目标端,当缓存大小不足时,线程会阻塞。套接字读数据时,如果操作系统缓存没有接收到信息,则读线程阻塞。线程阻塞情况下,就不能处理其他事 阅读全文
摘要:
上篇文章介绍了Socket和ServerSocket简单使用和源码,服务器端会对每个客户端请求创建一个线程,为使服务器端能同时处理多个客户端请求,可以采用多线程的方式。本文仅对实例进行简单记录,如下。 服务器端 while循环获取连接,并构造ServerOneJabber,启动线程处理客户端交互。 阅读全文