liu0013 2009-06-17 16:56
浏览 251
已采纳

io locked, ifxjdbc.jar 是否存在bug

一个数据入库的线程,偶尔会出现如下问题,导致入库的线程阻塞住了。不知道是不是属于jdbc的bug,有什么好的解决办法么?
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked (a java.io.BufferedInputStream)
at com.informix.asf.IfxDataInputStream.readFully(IfxDataInputStream.java:149)
at com.informix.asf.IfxDataInputStream.readInt(IfxDataInputStream.java:229)
at com.informix.jdbc.IfxSqli.receiveCost(IfxSqli.java:2874)
at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2259)
at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2174)
at com.informix.jdbc.IfxSqli.sendExecute(IfxSqli.java:1230)
at com.informix.jdbc.IfxSqli.sendCommand(IfxSqli.java:812)
at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:697)
at com.informix.jdbc.IfxResultSet.executeUpdate(IfxResultSet.java:305)
at com.informix.jdbc.IfxStatement.executeUpdateImpl(IfxStatement.java:850)
at com.informix.jdbc.IfxPreparedStatement.executeBatch(IfxPreparedStatement.java:3072)

[b]问题补充:[/b]
是用jstack 查看的信息,线程并未抛出异常:
"Thread-3421" prio=10 tid=0x00002aaafc0a7000 nid=0x6df0 runnable [0x0000000042dd5000..0x0000000042dd5a10]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked (a java.io.BufferedInputStream)
at com.informix.asf.IfxDataInputStream.readFully(IfxDataInputStream.java:149)
at com.informix.asf.IfxDataInputStream.readInt(IfxDataInputStream.java:229)
at com.informix.jdbc.IfxSqli.receiveCost(IfxSqli.java:2874)
at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2259)
at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2174)
at com.informix.jdbc.IfxSqli.sendExecute(IfxSqli.java:1230)
at com.informix.jdbc.IfxSqli.sendCommand(IfxSqli.java:812)
at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:697)
at com.informix.jdbc.IfxResultSet.executeUpdate(IfxResultSet.java:305)
at com.informix.jdbc.IfxStatement.executeUpdateImpl(IfxStatement.java:850)
at com.informix.jdbc.IfxPreparedStatement.executeBatch(IfxPreparedStatement.java:3072)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at com.ebupt.pa.zmcc.sxdatasynch.adgroup.InsertGroupThread.run(InsertGroupThread.java:55)
[b]问题补充:[/b]
我的多线程逻辑很简单,只是有个线程池,把数据从文件里取出一部分,从线程池中取出一个线程入库。
如果真的是jdbc的bug,有什么方法来打断这个阻塞呢?
另外能具体说下

  • locked (a java.io.BufferedInputStream)

这个问题的原因,是什么情况会出现io locked呢?“同步操作”具体一点?不太明白,谢谢!
[b]问题补充:[/b]
从线程堆栈看,有时只有一个线程阻塞,应该不是得不到资源导致线程死锁的,
另外我想有没有可能是socket链路出了问题,导致缓冲区满了,而使read()方法locked了呢?不清晰的想法,有点模糊。
[b]问题补充:[/b]
恩,大概间隔一些天才会出现一次,是否有什么办法来弥补一下这个bug,比如发现某个线程阻塞了,用什么方法结束线程,再重新启动一个线程呢?

  • 写回答

5条回答 默认 最新

  • wanghaolovezlq 2009-06-17 17:58
    关注
        - locked <0x00002aaab3c84eb8> (a java.io.BufferedInputStream) 
    

    会不会由于什么原因同步操作时搞出问题了

    如果你代码写得没问题,那可能真是它的bug,

    看看你的代码对于多线程的情况

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名