多线程程序应该怎么调试,怎么设置断点?

解决方案 »

  1.   

    线程切换的不确定性,增加了多线程调试的难度,但为了达到预期的效果,可以多使用sleep,让某个线程出让控制权,或使得某个线程得到控制权,也许这样可以解却一些问题,不然,你会发现程序莫名其妙的在一些线程中跳来调去,无法调试另外,将打印结果输出到控制台,有时是个很无奈,但又有效的方法。
      

  2.   

    线程中断itterrupt()方法
    中断错误内写语句,并还有return语句。
      

  3.   

    不知道你用的是什么IDE.
    jb.eclipse,debug的时候都可以看到当前运行的是那个线程。
    debug的时候,仔细看下具体事哪个线程在运行。
    一个线程不用说肯定是按顺序执行的。
    别忘记了main也是个线程
      

  4.   

    和锁争夺无关的,和一般的一样调试
    和锁争夺有关的,基本无法用断点,可以用OptimizeIt的ThreadDebugger
      

  5.   

    eclipse 调试的时候在左上角会有每个线程状态,单击就可以查看
      

  6.   

    VM在解释字节码到本地代码的过程中,会做优化,改变指令的执行顺序,因为JMM的缺陷导致后来volatile关键字的含义改变来保证VM不做这种优化。不过这种是指令级的优化,在Eclipse这样的IDE李根本看不到的,但是有些时候却是会影响到你的结果的正确性。对于多线程下资源争夺的调试,确实是个难点,发生的概率非常非常小,有些情况下非常非常tricky.有时候就算你是用一些工具(比如OptimizeIt的ThreadDebugger等)也很难发现。个人认为,对JMM的深入了解和程序结构设计会有很大帮助,尽量在开发阶段多花点时间来避免问题,如果发现问题再调试,很棘手的。
      

  7.   

    VM在解释字节码到本地代码的过程中,会做优化,改变指令的执行顺序,因为JMM的缺陷导致后来volatile关键字的含义改变来保证VM不做这种优化。不过这种是指令级的优化,在Eclipse这样的IDE李根本看不到的,但是有些时候却是会影响到你的结果的正确性。对于多线程下资源争夺的调试,确实是个难点,发生的概率非常非常小,有些情况下非常非常tricky.有时候就算你是用一些工具(比如OptimizeIt的ThreadDebugger等)也很难发现。个人认为,对JMM的深入了解和程序结构设计会有很大帮助,尽量在开发阶段多花点时间来避免问题,如果发现问题再调试,很棘手的。