多线程并发编程笔记04(小滴课堂)---锁

锁的分类:

 

 lock的使用:

那lock和synchronized的区别是什么呢?
 

 

实现属于自己的锁:

扫描二维码关注公众号,回复: 16604344 查看本文章

通过运行结果我们发现,好像出现了一种死锁的感觉,没有成功重入,这是不对的,所以我们要去改我们的自定义锁:

 

 

 

这样改动之后我们就可以完成重入功能了。 

 

 

 

 

我们可以发现这个值是不对的。

因为由于线程休眠,会导致j没有+1就被读到了值。

而按照我们之前学习的我们应该可以使用synchronized关键字修饰方式来通过加锁的方式做到线程安全。但是这种做法太浪费资源了,我们是想在写的时候,其它线程不能去写也不能去读,但是读的时候所有线程都可以读,但是不能写。

这种情况我们就可以使用读写锁:

 

我们现在加上了读锁和写锁,再去运行:

 值都是3,证明i和j都是一样的。

可以在控制台尝试读读,读写,写写操作,进行线程debug,可以发现读读是共享,其它操作都是互斥的。

锁降级:

有这样一段简单的代码,我们先调用写锁,再调用读锁:

 

注意点: 降级之后,写锁并不会直接降级成读锁,不会随着读锁的释放而释放,因此需要显式的释放写锁。

是否有锁升级?

没有运行出结果。

说明在这个类里不存在锁升级。

 

 

 

值都是4,肯定是不符合我们的预期的。

这时我们就可以使用我们的读写锁。

 

 我们发现现在的输出就是符合实际的了。

 

 

猜你喜欢

转载自blog.csdn.net/weixin_52618349/article/details/129782952
今日推荐