Archive

Posts Tagged ‘多线程’

jdk中SimpleDateFormat的实例线程不安全

3月 1st, 2016 3 comments

线上服碰到诡异问题,解析一段无参数固定代码生成的时间字符串获得时间戳,不定概率出现解析异常,堆栈如下。

产生的原因,因为SimpleDateFormat每次new的代价比较高,固定new一个后重复使用。一开始并没有对输入字符串进行日志打印,就以为是输入字符串的错误,就难以定位到产生问题的原因。

阅读更多…

Tomcat的Connector:Coyote

5月 20th, 2013 1 comment

上一篇博文讲了Tomcat的系统架构,今天花了一天时间研究了下coyote的源码,大致对普通IO版本有所了解。被同学提醒后发现,Tomcat6已经支持异步IO了,但默认是普通IO版本,需要在Connector的protocol参数中定义为Http11NioProtocol才开启异步IO模式。

主要的代码,Socket的服务在org.apache.tomcat.util.net.JIoEndpoint类,解析处理HTTP请求在org.apache.coyote.http11包的Http11Protocol类和Http11Processor类,org.apache.catalina.connector.CoyoteAdapter负责连接Connector模块(coyote)和Container模块。

线程池默认用的JIoEndpoint类中的子类WorkerStack,若在server.xml配置使用了Executor,则使用org.apache.catalina.core.StandardThreadExecutor(对ThreadPoolExecutor的一层包装)。并发量高的情况下Executor的效率会高一些。 阅读更多…

Tomcat6源码学习

5月 19th, 2013 1 comment

上一篇博文中说到因为电脑风扇坏了2天于是看完了《How tomcat works》译本,不过这本书是针对Tomcat4和5来讲的比较老了,然后再结合Tomcat6.0.26的源代码调试学习了总共一周的时间,算是大致将Tomcat6.0的一部分工作机制(JSP、JMX、安全管理等模块没研究)给搞清楚了。大概是因为平时基于Java的Web程序写的太多,对Tomcat这一块源码研究特别感兴趣,有时候为了想通一个问题兴奋地吃饭睡觉都在一直想,非常有动力并且也有效率,好久没有这种感觉了。

阅读更多…

HashMap多线程中引发的死循环

10月 1st, 2012 5 comments

串叔发现的问题,觉得很有意思,已有文章作详细描述,把原文翻译地讲一下。原文:http://mailinator.blogspot.com/2009/06/beautiful-race-condition.html。

Java的HashMap本身就不支持多线程,是线程不安全的,不过代码中有一些机制来阻止多线程中的不安全因素,比如在多线程修改操作中抛出ConcurrentModificationException,但是HashMap忽视了数组扩容时候这一修改操作,从而导致可能在多线程中进行了不安全的操作。 阅读更多…