eclipse debug 多线程示例

转载 2016年08月30日 10:22:01

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

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

package com.wxw.debug;

     

publicclass TestMainextends Thread {

     

    @Override

    publicvoid run() {

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

    }

        

    publicstatic 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

publicclass Singleton {

    privatestatic Singletoninstance;

   

    private Singleton() {

    }

   

    publicstatic Singleton getInstance() {

        if (instance ==null) {

            System.out.println(instance);

            instance =new Singleton();

        }

        returninstance;

    }

}

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

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

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

最后的结果:

  com.wxw.debug.Singleton@1fc0f04

com.wxw.debug.Singleton@13ded59

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

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

eclipse中多线程调试

最近在实习公司开发的使用到了多线程一些相关的东西,对于多线程在eclipse中一些使用有所了解交流一下。 多线程展示 这是一个简单的多线程程序,运行的结果,我们应该知道,四个线程会随机顺序打印出结...
  • Fishering_93
  • Fishering_93
  • 2016年11月06日 11:52
  • 796

eclipse debug 多线程

以前用到过许多线程开发,对多线程开发也算是小有点心得,但一开始多线程开发的时候,碰到很多壁。但总得来说,有个好的工具总是能事半功倍。我用的工具是eclipse,在开发多线程时,其debug模式是能直接...
  • binyao02123202
  • binyao02123202
  • 2014年01月16日 16:38
  • 20326

Idea Intellij多线程调试

(适用Idea 14 & 15,其他版本未知)几天前遇到一个问题: 在多线程调试的时候,一些断点会被跳过。比如像下面的代码:public static void main(String[] args...
  • fuzzytalker
  • fuzzytalker
  • 2016年03月18日 17:16
  • 18671

一次多线程debug经历

关键词:strcmo-sse2-unaligned.S 在Linux下学习多线程编程,却出现了一个莫名奇妙的错误。如下:Can't find a source file at "build/glib...
  • dp_huang
  • dp_huang
  • 2017年07月06日 11:13
  • 533

多线程的那点儿事(之多线程调试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】     软件调试是我们软件开发过程中的重要一课。在前面,我们也讨论过程序调试,比如说这里...
  • feixiaoxing
  • feixiaoxing
  • 2011年12月05日 20:20
  • 34879

Eclipse客户端程序中多线程的使用

Eclipse作为一个开发平台,使用越来越广泛,基于Eclipse Rich Client Platform开发的客户端程序也越来越多。在当今越来越复杂的应用环境中,我们的客户端程序不可避免的要同时进...
  • dingnate
  • dingnate
  • 2014年07月04日 09:20
  • 861

Eclipse调试多线程代码,在debug的时候

相信到现在为止,不管是什么编程语言,程序员都使用了IDE,IDE简化了程序员的开发过程。IDE能够管理项目,自动生成代码,自动生成文档,以及调试应用程序。 默认情况下,在调试多线程程序时,当遇到...
  • HarryWeasley
  • HarryWeasley
  • 2015年09月16日 21:34
  • 2412

简单的并发测试以及线程监控

并发测试 ab测试工具 JMeter测试工具 Eclipse设置程序可用内存 jvisualvm监控线程
  • gfd54gd5f46
  • gfd54gd5f46
  • 2017年02月15日 00:57
  • 2319

Eclipse调试多线程代码

相信到现在为止,不管是什么编程语言,程序员都使用了IDE,IDE简化了程序员的开发过程。IDE能够管理项目,自动生成代码,自动生成文档,以及调试应用程序。 默认情况下,在调试多线程程序时,当遇到断点...
  • czjuttsw
  • czjuttsw
  • 2013年02月16日 13:51
  • 15431

eclipse调试多线程

简单的使用eclipse调试多线程,debug模式下:     1.断点打在run方法中,然后具体步骤可打在调用方法中。     2.选中线程调试该线程,f6 ,后可切换线程测试。 转:http...
  • cai805847305
  • cai805847305
  • 2016年05月15日 23:14
  • 1884
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:eclipse debug 多线程示例
举报原因:
原因补充:

(最多只允许输入30个字)