suspend的类型分为
1、ALL:有线程进入该断点时,暂停所有线程
2、Thread:有线程进入该断点时,只暂停该线程
讨论下不同线程在同一时间段都遇到断点时,idea的处理方法。假如在执行时间上,thread1会先进入断点1,Thread2后进入了断点2:
断点1暂停类型为all,断点2暂停类型为all
- 断点1先遇到,thread1执行被暂停。由于断点1暂停类型为ALL,所以thread2的执行也同时被暂停,且无法达到断点2
- 按F8,对thread1进行逐步调试,在thread1在恢复执行时,其他线程也开始恢复执行。如果在此期间,thread2会走入到断 点2,此时断点2并不会生效,会被忽略
- 当thread1的一行代码执行完再次暂停时,thread2也同步被暂停执行
断点1暂停类型为all,断点2暂停类型为thread
- 效果同(1)
断点1暂停类型为thread,断点2暂停类型为all
- thread1与thread2都会进入断点,俩个线程的逐步诊断互不影响
- 断点2还是会暂停其他线程
断点1暂停类型为thread,断点2暂停类型为thread
- thread1与thread2都会进入断点,俩个线程的逐步诊断互不影响
- 只有这俩个线程会被暂停,其他线程均保持执行
总结:
1、同时只会有一个all类型的断点生效,且在这个断点结束前,其它线程遇到的任何断点均不生效
2、all类型断点和thread类型断点可同时生效(只能在先遇到thread类型断点,再遇到all类型断点),且各自保持独立诊断
3、thread类型断点可同时生效,不论先后,且相互独立