首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[小弟我被自己坑出翔]socketRead0 Block进程

2014-01-01 
[我被自己坑出翔]socketRead0 Block进程事实证明,我的确是一个挖坑好手!挖得一手好坑,坑得一手好人!可惜每

[我被自己坑出翔]socketRead0 Block进程
    事实证明,我的确是一个挖坑好手!挖得一手好坑,坑得一手好人!可惜每每别人没坑着,总是坑了自己。灰头土脸之余,来回首一下今天这个陨石洞!
    小弟最近在用java Socket开发一个通信传输小应用,在满怀激情挥洒汗水一阵乱码之后,很不幸果然不出小弟所料,这个应用不work啊。不仅该传的东西没传,Server上处理本次通信的线程还被Block住了。事已至此啥也不说了,赶紧撸起袖管子~看Dump呗。一看Dump,线程被block在一个叫socketRead0的方法上~啥?socketRead0,?谁TM命名这么不规范!定睛一瞧,这是一个native方法,我伙呆~小弟这个navie小弱码渣居然在有生之年能被native方法坑到,坑得值啊!想到这里,小弟心里不禁油油然起来鸟!
    那到底为啥子小弟会被这个native方法block到呢~经过认真仔细的考证学习,是因为socketWrite0方法会把数据写到Tcp buffer里等着对方来读,如果这个buffer被写满了,却没有被读,这样的话socketWrite0就闷声block线程(如果你设置了一个非常长的timeout)~
    于是乎,真相只有一个!就是小弟的程序里必然有一个地方把这个buffer写满了没有被读啊!果不其然,原因就是这样,至于小弟在程序里的什么地方,用什么方式坑到了自己,就不细说了,人艰不拆啊!!!

    PS.这个错误还常见于log4j的SocketAppender上~大家要小心呦,不要因为一句log就block了整个线程呦

热点排行