Java多线程下死锁问题的深度剖析与应对之道
死锁是什么?为何会发生?
想象一下,你在餐厅里,拿着两把叉子和勺子,但你发现左边的人也在拿勺子,右边的人也在拿叉子。结果大家都等着对方先放下餐具,谁也不肯先吃。这就是一种“死锁”的现象。在Java的多线程编程中,死锁是指两个或多个线程因为争夺资源而彼此等待,导致程序处于永久阻塞状态。
2025年05月30日
想象一下,你在餐厅里,拿着两把叉子和勺子,但你发现左边的人也在拿勺子,右边的人也在拿叉子。结果大家都等着对方先放下餐具,谁也不肯先吃。这就是一种“死锁”的现象。在Java的多线程编程中,死锁是指两个或多个线程因为争夺资源而彼此等待,导致程序处于永久阻塞状态。
2025年05月30日
在开发中,变量名,函数名一般要做到清晰明了,尽量做到看名字就能让人知道你的意图,所以变量和函数命名是挺重要,今天来看看如果较优雅的方式给变量和函数命名。
一、变量
使用有意义和可发音的变量名
// 不好的写法 const yyyymmdstr = moment().format("YYYY/MM/DD"); // 好的写法 const currentDate = moment().format("YYYY/MM/DD");
2025年05月30日
还记得小时候的万花尺吧?这么画:
一点也不费脑筋,就可以出来这么多丰富多彩的复杂几何图形。
具体而言,可以用万花尺玩具(如图2-1所示)来绘制数学曲线。这种玩具由两个不同尺寸的塑料齿轮组成,一大一小。小的齿轮有几个孔。把钢笔或铅笔放入一个孔,然后在较大齿轮(内部有齿)内旋转里面的小齿轮,保持笔与外轮接触,可以画出无数复杂而奇妙的对称图案。
现在,在电脑里,用Python也可以这么玩了,让我们看看Python的万花尺效果吧。(不用急,程序在后哦)
2025年05月30日
java.util.concurrent.Future, 代表着通过异步计算返回结果,创建异步任务时,返回一个java Future对象。异步任务完成后,可以通过启动任务时返回的Future对象访问结果,一些Java的内置并发实用程序,比如ExecutorService,从它们的一些方法返回一个java Future对象。在ExecutorService中,当提交一个Callable以便并发(异步)执行时,它返回一个Future。
2025年05月30日
DelayQueue 是 Java 并发包(java.util.concurrent)中的一个阻塞队列实现,用于存放实现了 Delayed 接口的对象。队列中的元素只有在其延迟期满后才能被取出。