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