代码之家  ›  专栏  ›  技术社区  ›  BlairHippo

在Java中,竞争文件访问是否可能导致死锁?

  •  2
  • BlairHippo  · 技术社区  · 16 年前

    编辑: 回答pyrolistic的问题:代码没有使用FileLock,而是在WinXP机器上运行。不问,但可能值得注意的是:生产机器运行的是Java1.5。

    4 回复  |  直到 16 年前
        1
  •  2
  •   JamesG    16 年前

    暂时将生产过程设置为使用调试支持启动,将此添加到java程序的启动方式或tomcat启动:

    -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
    

    jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
    

    并查看您的堆栈。

        2
  •  0
  •   user207421    16 年前

    FileLock是一种进程间锁定机制。它在同一个JVM中什么都不做,所以不是这样。我会查看您的同步,特别是确保您总是以相同的顺序获取多个锁。

        3
  •  0
  •   BlairHippo    16 年前

    我得到了一些有用的技巧来追踪潜在的bug,但根据我得到的回答,似乎实际问题的正确答案是:

        4
  •  0
  •   Zack Jannsen    12 年前

    我知道这是老生常谈了,但要澄清“不”的答案(对于我们这些需要知道原因的人):

    死锁发生在两个完全不同的进程(事务)更新交替的相关行或记录时,但顺序相反。基本上,两个人都挂起等待对方完成一个永远不会发生的动作(因为他们都在等待对方)。这通常存在于错误的数据库设计中。

    如果我记得,维基百科在这里有一个很好的定义: http://en.wikipedia.org/wiki/Deadlock