一个想休息的线程:JVM到底是怎么处理锁的?怎么不让我阻塞呢?

阅读: 评论:0

一个想休息的线程:JVM到底是怎么处理锁的?怎么不让我阻塞呢?

一个想休息的线程:JVM到底是怎么处理锁的?怎么不让我阻塞呢?

我是一个线程,生活在JVM(Java虚拟机)中, 这一段日子过得有些无聊,整个世界似乎只有这一个人,天天忙着执行代码,想休息一下都很难。

 

我听说人类写的代码中有些特殊的地方,叫做临界区,比如synchronized修饰的方法或者代码块,他们非常神奇,在同一时刻JVM老大只允许一个线程进入执行。

 

实际上,老大设置了一把锁,抢到了这把锁就可以执行,否则只能阻塞,等待别人释放锁。

 

老大说,阻塞就是不用干活了,老老实实地等着就行。

 

竟然还有这等美事! 赶紧让我阻塞一次吧。

 

可是老大又说:“每次设置锁我都得和操作系统打交道,请他在内核中维护一个什么Mutex(互斥量)的东西,他还得把你们这些线程阻塞,切换,这可是一笔巨大的费用啊,所以这些锁还是少用为妙。”

 

我运气也不好,我不知道执行了多少代码,调用了多少函数,竟然一次也没遇到临界区!

 

我想也许这个程序员编程时不小心,没有考虑多线程并发的情况; 也有可能是这些程序大部分都是无状态的,多少个线程执行都没有问题。

 

于是我只好一直执行下去, 不知道过了多少天,我激动地发现,一个synchronized修饰的代码块终于出现了:

 

Account account = ...

synchronized(account){

    ...临界区的代码...

<

本文发布于:2024-01-28 02:28:57,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063801414127.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:让我   是怎么   线程   JVM
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23