• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

显式锁的使用

引言

在拥有同步关键字synchronize的情况下,Java还是在5.0版本中增加了一个同步锁对象,lock,也叫显示锁,因为synchronize有一些缺点。synchronize有哪些缺点?在后续课程中,synchronize和lock之间的区别将在小节中详细描述。本节主要介绍显示锁及其使用。为什么叫显示锁?因为我们可以手动获取和释放锁。以前,当使用同步时,锁是自动获取和释放的。同步锁被称为隐式锁,而锁被称为显示锁。

2g3h3sqk0tk5123.jpg

本节主要介绍和使用锁。我们先来看第一点。什么是锁?它的功能和synchronize一样,也可以实现线程同步,但是比synchronize更强大。优势在于它的灵活性,可以自由获取和释放锁。再来说说锁。它是一个接口,定义了一些与锁相关的操作。有六种方法。

tah1wsvcmoa5124.jpg

这六种方法如果按照作用分类,可以分为获取锁、释放中间阻塞的数字和线程、条件,专门用于等待和唤醒线程。

vawdgvdadid5125.jpg

本节主要介绍锁定方法和解锁方法。下面是三个常用的锁子类。它们分别是reentrantlock、readlock和writelock。

iioia3pqmv55126.jpg

我们以reentrantlock为例来使用锁,使用lock方法来获取同步锁。

in1ysq2ggka5127.jpg

使用unlook方法释放同步锁。

rg2wqdogdsa5128.jpg

自定义任务。在任务中,先初始化一个look锁,新建一个reentrantlock对象,然后用lock方法获取锁,再在lock和unlock之间写我们要同步的内容。比如这里我们让当前线程休眠一秒,一秒后输出当前线程的名字,最后用unlock方法释放锁。

pwlcxylbc0f5129.jpg

让我们执行这个任务,首先创建任务,然后创建两个线程,然后将任务传递给线程,最后启动线程。

fqseg0is0dt5130.jpg

从执行结果来看,前后一秒输出线程名,说明锁锁有同步的功能。

com/i/l/?n=22&i=blog/1782952/202205/1782952-20220503214532825-1356044299.jpg"/>

 

 

总结

最后来总结一下本节的内容,本节介绍显示锁lock,它具备和synchronize一样的作用,可以实现线程同步,但是它比synchronize更强大,其中一个强大之处啊就是灵活,它可以自由的获取锁和释放锁。对应这两个操作的方法分别是lock和unlock,lock用于获取锁,unlock用于释放锁,在实际开发中越来越多的人选择使用lock锁,它不是用来替代synchronize的,而是来弥补synchronize的不足。 

mmpvgguuozj5131.jpg

 

 


  

附录:

笔记完整文本:

在已经有了同步关键字centralize的的情况下,Java依然在5.0版本中新增了一个同步锁对象。Knock又称显示锁,之锁以新增,它是因为synchronize有一些不足,究竟生克赖子的有哪些不足?在后续课程三个less的与look的区别,一节中详细介绍,本节主要是来介绍显示锁look及使用,为什么叫显示锁?是因为我们可以手动的去获取素与释放素之前使用synchronize的的时候则是自动获取锁与释放,锁锁以synchronize的被称之为影视锁,local锁被称之为显示锁。 本节主要是来介绍和使用look。首先来看第一点,什么是look?它具备和synchronize的一样的作用,也可以实现线程同步,但是它比生根赖子的更强大,强大之处在于它更灵活,它可以自由的获取锁释放锁再来谈谈look本身它是一个接口,里面定义了一些和锁相关的操作,一共有6个方法,将这那个方法按功能分类的话,可以分为获取数、释放数和中段阻塞的线程以及条件、condition、condition专门用于线程等待和唤醒线程。本节主要介绍的是look方法和Outlook方法。这里列举了三个常用的look子类分别是可重入锁re出来的locker和读锁window look以及写锁right look。 下面就以rain tried locker为例来使用look锁,使用locker方法就可以获取同步锁,使用on look方法就可以释放同步锁制定一个任务。在任务中首先初始化一个look锁又一个瑞恩出来的look对象,然后使用look方法获取锁之后将我们要同步的内容写的look与unlock之间。例如这里我们使当前线程休眠一秒钟,一秒钟之后输出当前线程名称,最后使用unlock方法释放速,下面我们来执行该任务,首先将任务创建出来,然后创建两个线程,接着将任务传递给现场,最后启动线程,从执行结果来看,前后间隔一秒钟输出线程名称,说明洛克锁具备同步作用。 最后来总结一下本节的内容,本节介绍前10首look它具备和super lights的一样的作用,可以实现线程头部,但是它比circulate的更强大,其中一个强大之处啊就是灵活,它可以自由的过去做与释放锁对应,这两个操作的方法分别是look和unlock,locker用于获取数,unlock用于释放素,在实际开发中越来越多的人选择使用洛克斯洛克索,它不是用来替代synchronize的,而是来弥补生根赖子的不足。

 

Link to comment
Share on other sites