天天看点

Java 8新特性探究(十)StampedLock将是解决同步问题的新宠

java8就像一个宝藏,一个小的api改进,也足与写一篇文章,比如同步,一直是多线程并发编程的一个老话题,相信没有人喜欢同步的代码,这会降低应用的吞吐量等性能指标,最坏的时候会挂起死机,但是即使这样你也没得选择,因为要保证信息的正确性。所以本文决定将从synchronized、lock到java8新增的stampedlock进行对比分析,相信stampedlock不会让大家失望。

在java5之前,实现同步主要是使用synchronized。它是java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

有四种不同的同步块:

实例方法

静态方法

实例方法中的同步块

静态方法中的同步块

大家对此应该不陌生,所以不多讲了,以下是代码示例

``

synchronized(this)

// do operation

}

rwlock.writelock().lock();

try {

} finally {

rwlock.writelock().unlock();

class point {

private double x, y;

private final stampedlock sl = new stampedlock();

void move(double deltax, double deltay) { // an exclusively locked method

//下面看看乐观读锁案例

double distancefromorigin() { // a read-only method

//下面是悲观读锁案例

void moveifatorigin(double newx, double newy) { // upgrade