Synchronized主要有以下几种用法:
1. 加在方法上:这里包括加在实例方法上、加在静态方法上。
2. 方法块:这里包括锁定this、锁定Class、锁定实例对象、锁定静态对象。
今天主要通过例子演示一下第一个用法:锁定不同的实例对象或不同的静态对象时,不同的函数方法之间的相互影响。
首先是锁定不同的实例对象时
测试代码如下:
import org.junit.Test;import java.util.Scan...
Java-Synchronized用法(4)
Synchronized主要有以下几种用法:
1. 加在方法上:这里包括加在实例方法上、加在静态方法上。
2. 方法块:这里包括锁定this、锁定Class、锁定实例对象、锁定静态对象。
今天主要通过例子演示一下第一个用法:加在实例方法上和加在静态方法上时,不同的函数方法之间的相互影响。
首先是加在实例方法上
测试代码如下:
import org.junit.Test;import java.util.Scanner;public...
Java-Synchronized用法(3)
Synchronized主要有以下几种用法:
1. 加在方法上:这里包括加在实例方法上、加在静态方法上。
2. 方法块:这里包括锁定this、锁定Class、锁定实例对象、锁定静态对象。
今天主要通过例子演示一下第二个用法:锁定实例对象和锁定静态对象。
首先是锁定实例对象
测试代码如下:
package com.xnck.example.sbtest;import org.junit.Test;import java.util.Scanner;public&...
Java-Synchronized用法(2)
Synchronized主要有以下几种用法:
1. 加在方法上:这里包括加在实例方法上、加在静态方法上。
2. 方法块:这里包括锁定this、锁定Class、锁定实例对象、锁定静态对象。
今天主要通过例子演示一下第二个用法:锁定this和锁定class。
首先是锁定this
测试代码如下:
1package com.xnck.example.sbtest; 2 3import org.junit.Test; 4 5public class ThreadTest ...
Java-Synchronized用法(1)
Synchronized主要有以下几种用法:
1. 加在方法上:这里包括加在实例方法上、加在静态方法上。
2. 方法块:这里包括锁定this、锁定Class、锁定实例对象、锁定静态对象。
今天主要通过例子演示一下第一个用法:加在实例方法上和加在静态方法上。
首先是加在实例方法上
测试代码如下:
1import org.junit.Test; 2 3import java.util.Scanner; 4 5public class Threa...
MySQL-死锁
本文基于MySQL的数据库引擎InnoDB,通过本文了解:
1. 死锁。
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。以下是一些示例。
更新时互相等待
#第一个事务
START TRANSACTION;
#第一步,更新1111这条数据
UPDATE test2 SET sum_count = sum_count + 1 WHERE id = '1111';
#第三步,更新2222这条数据
UPDATE test2 SET sum_count = sum_count + 1 WHE...
MySQL-幻读
本文基于MySQL的数据库引擎InnoDB,通过本文了解:
1. 幻读:在一个事务的两次查询中数据不一致。
上一篇了解了MySQL的不可重复读,但是有时候同一个事务中,前后两次查询显示数据有可能是不一致的,以下就为示例:
更新了其它事务中新增数据:
#第一个事务
START TRANSACTION;
#第一步,第二个事务插入前查询
SELECT * FROM test2;
#第五步,第二个事务插入后查询
SELECT * FROM test2;
#第六步,更新第...
MySQL-可重复读
本文基于MySQL的数据库引擎InnoDB,通过本文了解:
1. 可重复读。
首先,要了解的是,MySQL的事务默认隔离级别是:可重复读,即:在事务执行期间会锁定该事务以任何方式引用的所有行。
其它事务做更新时:
#第一个事务
START TRANSACTION;
#第一步,第二个事务更新前查询
SELECT * FROM test2;
#第四步,第二个事务更新后查询
SELECT * FROM test2;
#第六步,第二个事务提交后查询
SELECT * FROM test2;
...