相信大多使用Java的同学曾经都遇到过因为写多线程代码引起的一些不正常现象,所以在使用需要多线程的地方会很小心或者刻意避免使用多线程。但是另一方面,它能够显著提高应用性能、改善应用结构、增加处理器执行效率。如今的主机动辄24、32核,有性能要求的场景下多线程则成为必选方案。其实大多数多线程编程引起的血案无非是以下几点的问题:1)变量的读写无控制;2)资源竞争导致的死锁;3)依赖执行顺序。能够避免掉上面三个问题,接下来如果还要说多线程能够导致的问题,那就是性能问题了。
虽说多线程能够显著提高性能增加处理器的执行效率,但不合理的使用同样能够减慢响应速度,甚至拖垮操作系统。
这里举一个栗子,由一个线上报警说起:阳光明媚的一天,收到了一个报警,内容是这么说的
,很显然,报警阀值是2000。最初收到报警有点方:“应用有异常了!我要赶快到机器上处理下。”,关流量、查看线程数GC以及内存情况、dump文件、重启应用、开流量一气呵成。静下来思考发现其实重点在于你设置的阀值是否合理?是否引起了性能问题?
要评估这个数字并不是一件很难的事情,先