idea中断点类型之All和Thread的区别介绍
作者:我叫985
使用all模式对于程序中含有多个线程来说,会将多个线程都阻塞在断点,此时所有的线程都执行到此处,在最后一个线程执行到此处是会发生暂停,在这之前的线程会继续执行到任意位置,本文给大家详细介绍下idea中断点类型之All和Thread的区别,感兴趣的朋友一起看看吧
All模式
- 所有的线程都要在当前位置被阻塞,谁先来就先阻塞谁,发生阻塞时其他的线程当前时刻执行到哪里就在哪里进行原地等待。
- 如果此时按下一步F6,那所有的线程都通过阻塞代码如果此时按恢复程序运行F8,那么当前线程通过阻塞代码,等待下一个线程的到来,也是谁先来阻塞谁,发生阻塞时其他的线程当前时刻执行到哪里就在哪里进行原地等待。
public class ThreadAndAllBreakApplication { public static void main(String[] args) { ThreadTest thread1 = new ThreadTest(); thread1.setName("线程A"); thread1.start(); ThreadTest thread2 = new ThreadTest(); thread2.setName("线程B"); thread2.start(); ThreadTest thread3 = new ThreadTest(); thread3.setName("线程C"); thread3.start(); } } class ThreadTest extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + ": 1"); try { long millis = RandomUtil.randomLong(100, 500); System.out.println(Thread.currentThread().getName() + "睡眠: " + millis); Thread.sleep(millis); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ": 2"); System.out.println(Thread.currentThread().getName() + ": 3"); System.out.println(Thread.currentThread().getName() + ": 设置断点的前一行代码"); // 当前行设置断点 System.out.println(Thread.currentThread().getName() + ": 4"); System.out.println(Thread.currentThread().getName() + ": end");
线程A: 1
线程C: 1
线程B: 1
线程C睡眠: 283
线程A睡眠: 340
线程B睡眠: 127
线程B: 2
线程B: 3
线程B: 设置断点的前一行代码 // B来到了这里,此时其他线程A、B在原地等待,即A、B都在睡眠。
线程A: 2 // A之前执行到睡眠,现在执行2
线程A: 3
线程A: 设置断点的前一行代码 // A来到了这里,此时其他线程B、C在原地等待
线程C: 2 // c之前执行到睡眠,现在执行2
线程C: 3
线程A: 4
线程B: 4
线程A: end
线程C: 设置断点的前一行代码 // C来到了这里,如果不放行断点,B一直也不会输出end,会在原地等待(这里证明了当某个线程被All断点阻塞后,其他线程会在原地等待)
线程B: end
线程C: 4
线程C: end
Thread模式
所有的线程都会运行到断点处然后阻塞
- 如果此时按下一步F6,那当前的线程都通过阻塞代码,其他线程不动。
- 如果此时按恢复程序运行F8,那么当前线程通过阻塞代码,并自动切换到下一个阻塞线程进行调试。
到此这篇关于idea中断点类型:All和Thread的区别的文章就介绍到这了,更多相关idea 断点All和Thread内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!