博客
关于我
java中的synchronized和linux系统的futex到底什么个关系?
阅读量:89 次
发布时间:2019-02-25

本文共 1397 字,大约阅读时间需要 4 分钟。

Linux futex与Java中的synchronized锁

Linux Futex的基础知识

Futex(Fiber mutex)并非传统意义上的锁,而是锁实现中的一个基础组件。它允许在用户态完成锁的部分操作,而不需要所有操作都在内核态完成。这通过两个系统调用:futex_waitfutex_wake实现。这些系统调用帮助用户空间实现锁的机制,减少了内核态的参与,从而提升了性能。

锁的工作原理

传统锁在内核态完成所有操作,然而这可能导致频繁的上下文切换,影响性能。现代锁设计通过将部分操作移至用户态实现,减少了内核态的负担。通过CAS算法,在用户态完成抢锁的尝试,大部分情况下抢锁成功,竞争激烈时则进入内核态等待或唤醒。

Java中的Synchronized锁

Java的synchronized锁依赖于JVM的monitor机制,实际上使用了glibc中的pthread_mutexpthread_cond。这些接口基于Futex实现,用户态部分由JVM管理,内核态部分由Futex系统调用完成。这种设计使得Java在Linux上的多线程实现高效。

示例分析

以下Java代码展示了synchronized锁在多线程环境中的行为:

public class TestFutex {    private Integer a = new Integer(1);    synchronized void showA() {        System.out.println(a);        try {            Thread.sleep(3000);        } catch (InterruptedException e) {        }    }    class T extends Thread {        @Override        public void run() {            showA();        }    }    public T newThread() {        return new T();    }    public static void main(String[] args) {        TestFutex tf = new TestFutex();        T t1 = tf.newThread();        T t2 = tf.newThread();        t1.start();        t2.start();    }}

在这个例子中,两个线程同时启动,试图进入synchronized方法。当第一个线程进入方法时,其他线程进入futex_wait等待状态,直到锁被释放。

JUC中的ReentrantLock和Semaphore

JUC中的ReentrantLockSemaphore也基于Futex实现。LockSupport.park方法使用Futex进行parkunpark操作,这是实现可重入锁和信号量机制的基础。

总结

Futex作为锁实现的基础组件,在用户态和内核态都发挥着重要作用。Java的synchronized锁和JUC组件利用Futex实现了高效的多线程锁机制,这在Linux环境中得到了广泛应用。

转载地址:http://gan.baihongyu.com/

你可能感兴趣的文章
Python 中的线程
查看>>
Python 中的继承机制是什么样的?
查看>>
python读写excel之xlrd&xlwt&xlutils组合
查看>>
Python 中的装饰器是什么?
查看>>
Python 中的装饰器是如何工作的,有哪些实际应用场景?
查看>>
python读excel
查看>>
Python 中读取 CSV 文件-ChatGPT4o作答
查看>>
Python 之 filecmp
查看>>
python请求html_使用Python请求获取HTML?
查看>>
Python 之匿名函数和偏函数
查看>>
python 之栈的实现
查看>>
python语音播放
查看>>
python语言:装饰器原理
查看>>
Python 交互式数据可视化详解
查看>>
python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
查看>>
Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
查看>>
Python 从数据库中存储和检索密码的最安全方法
查看>>
Python语言及其应用 - 知识点遍历
查看>>
Python 优化提速的 8 个小技巧
查看>>
Python 余弦相似度与皮尔逊相关系数 计算
查看>>