learning volatile

Posted by Yuanbo on May 20, 2020

learning volatile

Java Object

markword 8 btes - lock info, hashcode, thread lockrecord ref. class reference 4 bytes instances - loss to next object alignment(make times of 8 bytes - 65 bit JVM)

Example of ClassLayout

import org.openjdk.jol.info.ClassLayout;

Object o = new Object();
System.out.println(ClassLayout.parseInstance(o).toPrintable());
java.lang.Object object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4        (object header)                           e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
     12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

HashSet 的底层实现 基于 HashMap

TreeSet is built on top of NavigableMap (SortedMap)

Concurrenthashmap - Thread-safe 1. segment Entry 2. CAS JDK1.7+

HashTable - Thread safe - built with Map + Synchronized

synchronized vs. lock Jvm, api leve.

公平锁 (put into queue)和非公平锁

Java 读写锁 - 可以同时读,又一个获得写锁则block其他线程

事务的四大特性(ACID) 原子性(atomicity):一个事务必须视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行成功其中的一部分操作,这就是事务的原子性。

一致性(consistency):数据总是从一个一致性的状态转换到另一个一致性的状态。

隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的,多个并发事务之间是相互隔离的。关于事务的隔离性,MySQL提供了四种隔离级别。

持久性(durability):一旦事务提交,所做的修改会永久保存到数据库中。即使系统崩溃,修改的数据也不会丢失。

关于事务的隔离性,MySQL提供了四种隔离级别:

Serializable(串行化):可避免脏读、不可重复读、幻读的发生。(级别最高) Repeatable-read(可重复读):可避免脏读、不可重复读的发生。 Read-committed(读已提交):可避免脏读的发生。 Read-uncommitted(读未提交):最低级别,任何情况都无法保证。(级别最低)


select @@tx_isolation;

set transaction isolation level 隔离级别名称;

set tx_isolation=’隔离级别名称’;

END