Java中 wait、notify和notifyAll方法

为什么Java中 wait、notify和notifyAll是Object类的方法

在考虑这个问题时,从这几个方法所做的事情来考虑可能更容易理解。对象 obj 分别调用wait、notify和notifyAll三个方法时所做的事:
• obj.wait() 是将当前线程放入 obj 对象的等待队列中
• obj.notify() 是从 obj 的等待队列中唤醒一个线程
• obj.notifyAll() 是唤醒 obj 等待对列中的所有线程

也就是说,wait、notify和notifyAll 这三个方法与其说是针对线程的操作,倒不如说是针对实列obj的等待队列的操作。由于所有实例都有等待队列,所以这三个方法也就成为Object类的方法。

参考书籍:图解Java多线程设计模式

Java通过线程名kill掉线程

背景

在生产环境,有时候因为代码bug或者数据量太大,导致某个线程死循环或者耗时非常长线程hang住了。在一些场景下,我们希望可以在不重启服务的情况下把这些线程终止了。

在 ActiveMQ 源码中发现一个通过线程名stop线程的方法,在此分享出来供参考。

阅读更多

线上CPU告警问题排查

排查步骤

1、 收到告警信息,提示 Full GC耗时长,FullGC次数频繁,FullGC后Heap使用率异常超过了95%.

2、 登录grafana,查看系统监控指标,发现一台机器CPU使用率指标突然升高。

3、 联系运维同事,查看具体哪个线程占用CPU高。查看占用CPU高的线程命令

1
2
3
top –Hp 进程号
# 把线程号转为16进制
printf "%x\n" 线程号
阅读更多