摘要:
最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java中所有对象的基类,其存在的价值不言而喻,其中wait和notify方法的实现多线程协作提供了保证。 public class WaitNotifyCase { public static void 阅读全文
摘要:
讲到高性能IO绕不开Reactor模式,它是大多数IO相关组件如Netty、Redis在使用的IO模式,为什么需要这种模式,它是如何设计来解决高性能并发的呢? 最最原始的网络编程思路就是服务器用一个while循环,不断监听端口是否有新的套接字连接,如果有,那么就调用一个处理函数处理,类似:while 阅读全文
摘要:
前言 线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处: 1、降低资源消耗; 2、提高响应速度; 3、提高线程的可管理性。 Java1.5中引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务, 阅读全文
摘要:
在TOMCAT WEB程序的运行过程中,突然触发了内存溢出错误,检查Tomcat的localhost日志,找到如下信息: 1 2 3 4 5 6 7 8 9 10 11 按照提示,找到代码进行检阅: 1 2 3 4 看了好几遍,没有发现明显的异常,既没有全局变量,也没有属性变量,没理由出现内存溢出, 阅读全文
摘要:
通过jstack可快速检查线程的死锁信息,用法如下: 1 2 3 4 5 翻到页底,可发现明显的死锁信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 从输出信息中,可明显发觉两个线程彼此锁定了对方需要的锁(0x000000076c636568与0x000000076c5806f8) 阅读全文
摘要:
之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况下表现不一样:短 阅读全文