`
JavaLuSir
  • 浏览: 19024 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

eclipse 调试多线程

阅读更多

以前用到过许多线程开发,对多线程开发也算是小有点心得,但一开始多线程开发的时候,碰到很多壁。但总得来说,有个好的工具总是能事半功倍。我用的工具是eclipse,在开发多线程时,其debug模式是能直接模拟多线程环境的,网上也有许多资料,但大多都不是很全。希望我能够将自己的一些心得记录下来,希望能帮助到还为多线程开发而纠结的朋友。

先写个简单的多线程测试用例:

package com.wxw.debug;

     

public class TestMain extends Thread {

     

    @Override

    public void run() {

        System.out.println("hello world");

    }

        

    public static void main(String[] args) {

        TestMain t1 = new TestMain();

        TestMain t2 = new TestMain();

        t1.start();

        t2.start();

    }

}

这段代码,控制台打印出两行

Hello world

接下来,将示范怎么样使用debug模式进行一步步的执行,后面将逐步对知识进行应用扩展

  1. 断点的位置

这里有个点需要注意,断点的位置一定要正确,run方法或者run以后调用的方法里,否则的话,程序跑完了,debug模式里也只有一个主线程在跑,好了,直接看结果。

在这里我们看到了两个线程已经起来了,在debug模式里也注明了Thread-0和Thread-1,在这里我再加段代码来更明显的显示哪个线程执行到了这里。

加上这段代码后,打印出来的结果就是

Thread-0 hello world

Thread-1 hello world

现在我需要将Thread-1这个线程先打印出来结果,也就是将线程可控,我想先执行哪个都行,怎么办了?为了更加明显,我多加几个线程,总共5个线程,按先后顺序打印出来,我是语言表达困难户,直接看图,图为动态,有点大,请耐心等待

我想这个动态应该不用多解释,也许有人会问这有什么用,这个用处可大了,我们可以控制哪个线程开始运行,哪个线程运行到某个点后,程序暂停在那里,然后其他程序再运行。最典型的例子就是单例模式在多线程下是否绝对安全(是否一定是单例),这里我也演示一下,线程不安全的单例模式代码,摘自:http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html

public class Singleton {

    private static Singleton instance;

   

    private Singleton() {

    }

   

    public static Singleton getInstance() {

        if (instance == null) {

            System.out.println(instance);

            instance = new Singleton();

        }

        return instance;

    }

}

是否是单例,打印出引用地址就可以了,测试环境用两个线程打印

正常情况下,应该打印出来两个同样的值,先直接run,不用debug模式,结果如下:

这一般情况下,是表现的单例,在大多数情况下,你有可能测试很多次的结果依然如此,但这段代码确实在多线程情况下会出问题,怎么才能重现这个问题了,下面直接用图演示:

最后的结果:

  com.wxw.debug.Singleton@1fc0f04

com.wxw.debug.Singleton@13ded59

这里可以看出,两个结果不一样,证明不是同一个对象。问题就这样重现,是不是觉得这个工具很有用啊。

这篇文章不是讲单例模式,举的是一个典型的例子,主要讲用debug模式解决多线程情况下的问题。我想,用debug模式,不仅仅用来解决问题,还能帮助我们理解一些知识点,这才达到了边用边学的好处。

 

 

转载自:http://blog.csdn.net/binyao02123202/article/details/18361755

分享到:
评论

相关推荐

    Eclipse调试方法入门

    线程调试让你能单独跟踪多线程应用程序中的各个线程。表达式评估则允许你实时计算和查看任何Java表达式的值,无需额外的代码修改。 总的来说,Eclipse的调试功能强大且灵活,适合处理各种复杂问题。通过熟练掌握...

    eclipse项目java线程实例

    总的来说,这个项目实例是一个极好的学习平台,涵盖了Java线程编程的基础和高级主题,对于提升你的多线程编程技能非常有帮助。在Eclipse环境下,你可以调试和分析线程行为,加深对并发编程的理解。通过研究压缩包中...

    java 多线程 源码 Eclipse开发 小型程序

    在Eclipse开发环境中,创建和调试多线程程序非常方便。你可以通过新建Java项目,创建源文件,编写上述代码,然后运行测试。Eclipse的调试器可以让你观察每个线程的执行情况,包括线程状态、堆栈信息等。 总结来说,...

    Eclipse调试Java的10个技巧

    ### Eclipse调试Java的十个高效技巧 #### 一、概述 在开发Java应用程序的过程中,调试是一项不可或缺的任务。良好的调试技能能够帮助开发者快速定位问题并解决它们。Eclipse是一款广泛使用的Java集成开发环境(IDE)...

    在Eclipse中使用debug(Eclipse调试常用技巧)

    7. 多线程调试:Eclipse允许开发者同时调试多个线程。在“Threads”视图中可以查看所有线程的状态,进行线程间的切换,甚至可以在某个特定线程上设置断点。 8. 异常处理和断点条件:Eclipse允许设置断点在抛出特定...

    多线程 小球 运行程序(eclipse工程可导入)

    标题中的“多线程 小球 运行程序(eclipse工程可导入)”表明这是一个与多线程编程相关的项目,可能是用Java语言实现的,因为Eclipse是Java开发的常用集成开发环境。这个程序可能设计了一个模拟小球运动的场景,通过多...

    Eclipse的Debug调试技巧大全

    Debug视图是Eclipse调试的核心窗口,它展示当前线程的调用栈信息,包括代码行号和断点状态。通过这个窗口,开发者可以清晰地看到程序的执行流程,便于定位问题。 2. **断点(Breakpoints)窗口** 断点窗口管理着...

    Eclipse调试方法入门.pdf

    在Eclipse中调试多线程程序,开发者可以利用以下功能: 1. **设置断点**:在代码的关键位置设置断点,当线程执行到此处时,程序会暂停,便于检查变量值和调用栈。 2. **线程视图**:Eclipse的线程视图(Threads View...

    Eclipse调试常用技巧.

    以上只是Eclipse调试功能的一部分,还有更多高级特性如 watches(监视表达式)、step filters(跳过特定类或方法的调试)、线程切换等,都可以极大地提升调试体验。熟练掌握这些技巧,可以使你更高效地定位和修复...

    Eclipse调试的7种方法

    以下将详细介绍标题提及的Eclipse调试的7种方法: 1. **条件断点**:普通断点是代码执行到某行时停止的基础,而条件断点则允许我们设置一个条件,只有当条件满足时,程序才会在该断点处暂停。这有助于减少不必要的...

    eclipse断点调试基础

    ### Eclipse 断点调试基础知识详解 #### 一、Eclipse 断点调试概述 在软件开发过程中,程序的调试是一项非常重要的工作。通过调试,开发者可以深入理解代码的执行流程,定位并修复程序中的错误。Eclipse 是一款...

    eclipse调试1

    "Eclipse调试技巧" Eclipse调试是每个程序员必须面对的工作,一般来说,Debug是通过在代码中设置断点,观察...Eclipse调试是一个非常强大的调试工具,提供了很多有用的功能和视图,帮助您快速找到和解决程序中的 Bug。

    Eclipse断点调试

    3. 暂挂线程(Suspend Thread):在多线程时暂挂此线程。 4. 暂挂虚拟机(Suspend VM):暂挂虚拟机。 在Variables视图中,可以改变变量的值,以便快速调试。 Eclipse调试器提供了所有标准调试功能,包括单步执行...

    多线程调试方法.pdf

    以下是一些使用GDB调试多线程程序的关键命令: 1. `info threads`:此命令用于显示当前可调试的所有线程及其对应的ID。星号(*)标记当前正在调试的线程。 2. `thread ID`:通过输入线程ID,可以切换当前调试的...

    Eclipse调试器和Debug视图

    ### Eclipse调试器和Debug视图知识点详解 #### 一、Eclipse SDK与内置Java调试器 **Eclipse SDK**(Software Development Kit)是专为Java开发设计的一个强大平台,其中包括了JDT(Java Development Tools)组件,...

    debug下的调试方法 eclipse快捷键大全

    以上就是Eclipse调试方法的一些核心内容,熟练掌握这些技巧,能让你在面对复杂的程序问题时更加游刃有余。在实际开发过程中,不断实践和探索,你会发现Eclipse的强大不仅仅在于它的快捷键,更在于它对开发流程的全面...

Global site tag (gtag.js) - Google Analytics