`

ReentrantLock and Synchronized (from peter)

阅读更多

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
 
public class HighContentionSimulator implements Runnable {
    enum Mode implements Runnable {
        LOCK {
            private final Lock lock = new ReentrantLock();
            public void run() {
                lock.lock();
                try {
                    operation();
                } finally {
                    lock.unlock();
                }
            }},
        SYNC {
            public synchronized void run() {
                operation();
            }}
    }
 
    private final Mode mode;
    private final int count;
 
    public HighContentionSimulator(Mode mode, int count) {
        this.mode = mode;
        this.count = count;
    }
 
    public void run() {
        for (int i = 0; i < count; i++)
            mode.run();
    }
 
    public static void operation() {
        Double d = Math.random();
    }
 
    private static void test(Mode mode) throws InterruptedException {
        int threadNumber = 4;
        int count = 1000 * 1000;
        long start = System.nanoTime();
        Thread[] threads = new Thread[threadNumber];
        for (int i = 0; i < threadNumber; i++)
            (threads[i] = new Thread(new HighContentionSimulator(mode, count))).start();
        for (int i = 0; i < threadNumber; i++)
            threads[i].join();
        long rate = 1000L * 1000 * 1000 * count * threadNumber / (System.nanoTime() - start);
        System.out.printf("%s operations/second %,d%n", mode.toString(), rate);
    }
 
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 3; i++) {
            test(Mode.LOCK);
            test(Mode.SYNC);
        }
    }
}


Prints

LOCK operations/second 2,722,306
SYNC operations/second 967,460
LOCK operations/second 2,838,865
SYNC operations/second 972,421
LOCK operations/second 2,848,031
SYNC operations/second 1,094,899
分享到:
评论

相关推荐

    ReentrantLock与synchronized区别

    java语言 并发编程 ReentrantLock与synchronized区别 详解

    ReentrantLock与synchronized

    在Java多线程编程中,`ReentrantLock`和`synchronized`都是用于实现线程同步的重要工具,确保在并发环境中数据的一致性和正确性。两者虽然都能实现互斥访问,但在功能、性能以及使用场景上有所不同。下面我们将深入...

    ReentrantLock 与 synchronized 简介

    ### ReentrantLock 与 synchronized 的比较 #### 一、引言 在Java中,多线程和并发控制一直是程序员关注的重点。随着Java的发展,其语言本身及标准库提供了丰富的工具来帮助开发者处理并发问题。其中,`...

    深入java并发编程,使用ReentrantLock和 Synchronized加锁

    在Java并发编程中,理解和熟练使用同步机制是至关重要的,这包括了`ReentrantLock`和`synchronized`关键字。这两个工具都是为了确保多线程环境中的数据一致性与安全性,防止出现竞态条件和死锁等问题。 `...

    第15讲 synchronized和ReentrantLock有什么区别呢?1

    在Java编程中,synchronized和ReentrantLock都是用于实现线程同步的重要工具,它们在并发控制方面扮演着关键角色。然而,两者之间存在一些显著的区别,这些差异体现在功能、灵活性、性能以及使用场景上。 首先,...

    简单聊聊Synchronized和ReentrantLock锁.docx

    本文将深入探讨Synchronized关键字锁和ReentrantLock锁的异同、功能特性以及它们在实际应用中的适用场景。 首先,Synchronized是一种内置的Java关键字,它提供了简单而强大的线程同步机制。当一个线程进入一个由...

    synchronized ReentrantLock volatile Atomic 原理分析.docx

    《Java并发编程:synchronized、ReentrantLock、volatile与Atomic深度解析》 在Java多线程编程中,正确地管理共享资源是至关重要的。本文将深入探讨四种关键的并发控制机制:synchronized关键字、ReentrantLock(可...

    Java中ReentrantLock的使用.docx

    Java中的ReentrantLock是线程安全编程中的一种高级锁机制,它属于Lock接口的一个实现,提供了比synchronized更丰富的功能和更高的灵活性。ReentrantLock的名字来源于它的可重入性,这意味着一个线程可以多次获取同一...

    Lock、Synchoronized和ReentrantLock的使用

    Lock、Synchronized 和 ReentrantLock 的使用 Lock、Synchronized 和 ReentrantLock 是 Java 中三种常用的同步机制,每种机制都有其特点和使用场景。下面对这三种机制进行详细的分析和比较。 一、Synchronized ...

    Java中的ReentrantLock类最全讲义

    目录: 简介 ReentrantLock的基本用法 2.1 创建ReentrantLock 2.2 获取锁和释放锁 公平性与非公平性 3.1 公平锁 3.2 非公平锁 中断响应 ...ReentrantLock与synchronized的对比 最佳实践与注意事项

    22 到底哪把锁更适合你?—synchronized与ReentrantLock对比.pdf

    在Java中,有两种主要的锁机制:内置的`synchronized`关键字和显式的`ReentrantLock`类。这两者各有优劣,适用于不同的场景。下面我们将详细讨论它们的区别、性能、特性以及使用上的差异。 1. **功能对比**: - `...

    java ReentrantLock详解.docx

    `ReentrantLock`是Java并发编程中的一种高级锁机制,它是`java.util.concurrent.locks`包中的类,提供了比`synchronized`关键字更丰富的功能和更细粒度的控制。相较于`synchronized`,`ReentrantLock`的主要优势在于...

    Java并发之ReentrantLock类源码解析

    ReentrantLock的锁机制是通过CAS(Compare-And-Swap)操作来实现的。CAS操作是原子操作,用于更新对象内的一个变量。ReentrantLock的lock方法使用CAS操作来尝试更新对象内的一个变量,如果更新成功,则将...

    并发编程 70 道面试题及答案.docx

    2. ReentrantLock 和 synchronized 的使用场景分别是什么? 答案:ReentrantLock 通常用于需要灵活锁定的场景,而 synchronized 通常用于实现线程安全。 五、volatile 关键字的作用 1. volatile 关键字的作用是...

    带你看看Java的锁(一)-ReentrantLock

    带你看看Javad的锁-ReentrantLock前言ReentrantLock简介Synchronized对比用法源码分析代码结构方法分析SyncNonfairSyncFairSync非公平锁VS公平锁什么是公平非公平ReentrantLockReentrantLock的构造函数lock加锁方法...

    第15讲丨synchronized和ReentrantLock有什么区别呢?.html

    第15讲丨synchronized和ReentrantLock有什么区别呢?.html

    ReentrantLock解析

    与synchronized关键字相比,ReentrantLock提供了更高的灵活性,如尝试加锁、定时加锁和公平锁等功能。本文将深入探讨ReentrantLock的实现原理,主要涉及其内部类AbstractQueuedSynchronizer(AQS)和Unsafe工具类。 ...

Global site tag (gtag.js) - Google Analytics