首页 > 编程知识 正文

java多线程锁表,线程锁有哪几种

时间:2023-05-06 01:04:41 阅读:40026 作者:4959

锁定概念

锁定是线程是否可以对代码块执行的条件。 简而言之,如果一个线程试图执行同步代码块,则只有在他获得该线程的锁定时才能执行。 如果没有,则必须通过其他线程执行代码块来解除锁定,然后再次申请获取锁定,才能执行。

你可以把钥匙比作厕所的钥匙,但线程是指需要上厕所的人。 当一个人需要上厕所的时候,他可以把厕所的门用gtdtd打开,直到他用完厕所,把钥匙交给另一个人,另一个人去厕所

一、公平锁公平锁是指线程按申请锁的顺序获取锁,先来后到

二、不公平锁定是指多个线程获得锁定的顺序不是申请锁定的顺序,而是以后可能申请的线程先获得锁定

公平锁定和非公平锁定可以通过ReentrantLock实现

publicstaticvoidmain (字符串[ ] args ) reentrantlockreentrantlock=newreentrantlock (} false ) false表示不公平,true表示公平

区分:

公平锁定/非公平锁定

然后,正在建设的ReentrantLock的创建可以指定构造函数的布尔类型来获得公平锁定或不公平锁定,默认值为不公平锁定

关于两者的区别:

公平锁:

公平的锁定是指公平。 在并发环境中,每个线程在获取锁定时,首先会看到保持此锁定的队列。 如果为空,或者当前线程位于队列开头,则占用锁定;如果为西,则加入队列,然后根据FIFO规则从队列中检索自己

公平锁

公平锁是粗暴的,上来后尝试直接占有锁,失败后采用公平锁这样的方式

同步是不公平的锁

三、可重锁是指同一线程的外函数获得锁后,内递归函数仍能获得该锁的代码,同一线程通过外方法获得锁时,进入内方法会自动获得锁。

scronized是可重新读取的锁。 这意味着线程可以访问已经拥有的锁同步的代码块。

公共类家庭(publicsynchronizedvoidway1) { System.out.println ('第一种方法'); way2(; } publicsynchronizedstaticvoidway2() { System.out.println ('第二种方法'); }如图所示,第一个函数调用第二个函数,两个函数都用同步限定。 这意味着一个线程获得了way1的锁定,同时也获得了way2的锁定。

四.自旋锁

旋转锁定(spinlock )。

尝试获取锁定的线程不会立即阻止,而是尝试以循环方式获取锁定。 这样做的好处是减少线程上下文切换的消耗。 缺点是环路消耗CPU。

CAS是自旋锁

五.排他锁和共享锁

独占锁:意味着一次只能有一个线程保留锁,这对于ReentrantLock和Synchronized都是独占锁

共享锁定:意味着多个线程可以保持锁定。

ReentrantReadWriteLock读锁定是共享锁定,写锁定是独占锁定。

读锁定共享锁定确保并发读取非常高效,读写、写和写过程是互斥的

简单来说,读锁共享一个锁,这意味着多个线程可以同时读取一个文件,从而提高了效率;写锁作为独占锁,在写入某个线程所在的文件时,只有该线程的一个线程

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。