您好,欢迎访问一九零五行业门户网

java中的锁是什么

锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。
java中的锁主要有以下几种概念:
1、同步锁
同一时刻,一个同步锁只能被一个线程访问。以对象为依据,通过synchronized关键字来进行同步,实现对竞争资源的互斥访问。
2、独占锁(可重入的互斥锁) 
互斥,即在同一时间点,只能被一个线程持有;可重入,即可以被单个线程多次获取。什么意思呢?根据锁的获取机制,它分为“公平锁”和“非公平锁”。java中通过reentrantlock实现独占锁,默认为非公平锁。
3、公平锁 
是按照通过clh等待线程按照先来先得的规则,线程依次排队,公平的获取锁,是独占锁的一种。java中,reetrantlock中有一个sync类型的成员变量sync,它的实例为fairsync类型的时候,reetrantlock为公平锁。设置sync为fairsync类型,只需——lock lock = new reetrantlock(true)。
4、非公平锁 
是当线程要获取锁时,它会无视clh等待队列而直接获取锁。reetrantlock默认为非公平锁,或——lock lock = new reetrantlock(false)。
5、共享锁
能被多个线程同时获取、共享的锁。即多个线程都可以获取该锁,对该锁对象进行处理。典型的就是读锁——reentrantreadwritelock.readlock。即多个线程都可以读它,而且不影响其他线程对它的读,但是大家都不能修改它。cyclicbarrier, countdownlatch和semaphore也都是共享锁。
6、读写锁
维护了一对相关的锁,“读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。“写入锁”用于写入操作,它是“独占锁”,只能被一个线程锁获取。
java中,读写锁为readwritelock 接口定义,其实现类是reentrantreadwritelock,包括内部类readlock和writelock。方法readlock()、writelock()分别返回度操作的锁和写操作的锁。
更多java知识请关注java基础教程。
以上就是java中的锁是什么的详细内容。
其它类似信息

推荐信息