eclipse debug 多线程
以前用到过许多线程开发,对多线程开发也算是小有点心得,但一开始多线程开发的时候,碰到很多壁。但总得来说,有个好的工具总是能事半功倍。我用的工具是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模式进行一步步的执行,后面将逐步对知识进行应用扩展
- 断点的位置

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

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

加上这段代码后,打印出来的结果就是
Thread-0 hello world
Thread-1 hello world
个线程,按先后顺序打印出来,我是语言表达困难户,直接看图,图为动态,有点大,请耐心等待

我想这个动态应该不用多解释,也许有人会问这有什么用,这个用处可大了,我们可以控制哪个线程开始运行,哪个线程运行到某个点后,程序暂停在那里,然后其他程序再运行。最典型的例子就是单例模式在多线程下是否绝对安全(是否一定是单例),这里我也演示一下,线程不安全的单例模式代码,摘自: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模式,不仅仅用来解决问题,还能帮助我们理解一些知识点,这才达到了边用边学的好处。
eclipse debug 多线程的更多相关文章
- eclipse debug (调试) 学习心得
eclipse debug (调试) 学习心得 进入debug模式: 1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ...
- eclipse debug模式
eclipse debug模式 1.怎样在Eclipse中设置断点 方法/步骤 1 首先打开工程项目 2 第一种是,把鼠标移动想要设置断点的行,在行号前面空白地方双击,就会出现断点 3 第二种是,在菜 ...
- eclipse debug 过滤一些包
eclipse debug java程序的时候, 我们按F5的时候,常常会进入java自带类库里,这些类库并不是我们需要debug的代码,这样会影响debug的效率,我们可以在eclipse里设置,过 ...
- Eclipse debug调试
Eclipse debug调试: F5:跳入方法F6:向下逐行调试F7:跳出方法F8:直接跳转到下一个断点
- 转:Eclipse Debug 界面应用详解——Eclipse Debug不为人知的秘密
今天浏览csdn,发现一文详细的描述了Eclipse Debug中的各个知识点,非常详尽!特此记录. Eclipse Debug不为人知的秘密 http://blog.csdn.net/mgoann/ ...
- Eclipse调试多线程代码
Eclipse调试多线程代码 标签: eclipse 调试 多线程 | 发表时间:2013-02-16 05:51 | 作者:czjuttsw 分享到: 出处:http://blog.csdn.net ...
- Eclipse Debug不能热部署解决
摘要: Eclipse Debug不能热部署代码may be out-of-synch 问题描述:Project通过ant工具编译部署到JBoss下,在使用Eclipse远程调试功... ...
- eclipse debug 执行到断点处并没有停下,断点无效问题
转自:http://blog.csdn.net/cuidiwhere/article/details/14434439 现象: 利用eclipse debug时,执行到断点处并没有停下.正常情况下,在 ...
- eclipse debug Liunx服务器上的svn项目
1.本地项目提交到svn上,以保证本地代码与服务器代码相同 2.开启服务器debug端口 3.使用root账号重新部署服务器项目并监听catalina.out sh /home/p/deploy/gt ...
随机推荐
- 浅谈JavaScript性能
最近在JavaScript性能方面有所感悟,把我的经验分给大家: 说到JavaScript,就不得不说它的代码的运行速度—— 在我初学JavaScript的时候,只是觉得它是一个很强大的脚本.渐渐的, ...
- 探究Java中Map类
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部 ...
- shell 批量压缩指定文件夹及子文件夹内图片
shell 批量压缩指定文件夹及子文件夹内图片 用户上传的图片,一般都没有经过压缩,造成空间浪费.因此须要编写一个程序,查找文件夹及子文件夹的图片文件(jpg,gif,png),将大于某值的图片进行压 ...
- 关于PHP的工作流引擎
关于PHP的工作流引擎,除了三大主流开源:PorcessMaker(排名第一,因其有拖放式图形定义界面),RadiCore(基于PETRI NET)和CuteFlow以外,另外还有一个不为人知的,但却 ...
- Android学习笔记:Home Screen Widgets(1):大约Widget
什么是Home Screen Widgets Home screen Widget即称为小工具或者中文小工具,是显示在主页上的views,通过后台进程更新view的数据. Android由AppWid ...
- 【POJ3037】Skiing 最短路
题意: 有个n*m的滑雪场,bessie要从(1,1)滑到(n,m),问最小时间. 起始有一个速度v,然后每从一个点A到一个点B(仅仅能上下左右走,每次一格),速度就会乘上2^(权值A-权值B). 然 ...
- 安装Visual Studio 2010 - 初学者系列 - 学习者系列文章
本文讲述如何安装Visual Studio 2010开发工具. 首先,通过下列地址获取Visual Studio 2010的副本 1.开始页面 2.欢迎页 3.这里选择 自定义 ,选择安装路径 4.这 ...
- 清空SQL Server数据库中所有表数据的方法
原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...
- iOS:由URL成员UIImage
很多时候,我们只能得到URL.然后,需要建立一个UIImage. 在正常情况下,.我们一般通过SDWebImage直接施工UIImageVIew的image,如何使用URL直接施工UIImage它? ...
- 【jar包】Android——eclipse共享library以及导出jar包
android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明 ...