作者:君望永远

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

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

package com.wxw.debug;
public class TestMain extends Thread {@Overridepublic 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模式,不仅仅用来解决问题,还能帮助我们理解一些知识点,这才达到了边用边学的好处。

多线程实战:每当变幻时

多线程实战:Web中使用多线程来增强用户体验

转载于:https://www.cnblogs.com/lxl57610/p/8253924.html

eclipse debug 多线程相关推荐

  1. eclipse调试多线程

    简单的使用eclipse调试多线程,debug模式下: 1.断点打在run方法中,然后具体步骤可打在调用方法中. 2.选中线程调试该线程,f6 ,后可切换线程测试. 转:http://blog.csd ...

  2. eclipse rcp 多线程

    Eclipse中多线程的实现,类似这样 Job job = new Job("job1") {  protected IStatus run(IProgressMonitor mo ...

  3. Eclipse debug neutron-server

    1 首先停掉neutron-server kill neutron-server in screen by ctr-c q-svc 2 cp /usr/local/bin/neutron-server ...

  4. eclipse debug(程序调试)单步执行 简述

    eclipse debug(程序调试)单步执行 简述 1.在需要程序停止的地方 双击打一个断点 2.右键以debug模式执行(有个虫子标志的选项) 3.单步执行 观察变量的变化 如图所示: debug ...

  5. eclipse debug 工程源码时出现source not found问题解决

    问题描述:使用eclipse debug启动应用,并且打断点在工程的源码上面,提示source not found. 问题解决: 1.选中工程,右键Debug As>Debug Configur ...

  6. Eclipse Debug不能热部署解决

    摘要: Eclipse Debug不能热部署代码may be out-of-synch 问题描述:Project通过ant工具编译部署到JBoss下,在使用Eclipse远程调试功... " ...

  7. mac 电脑 eclipse 启动停在 org.eclipse.debug.core 导致无法启动

    问题: 解决方法: 将工作目录下(下方目录) workspace/.metadata/.plugins/org.eclipse.debug.core/.launches/ 中内容删除,重启,解决问题. ...

  8. Eclipse Debug 配置

    Eclipse Debug 配置 创建和使用 Debug 配置 Eclipse Debug 配置类似于运行配置但它是用于在调试模式下开启应用. 打开 Debug 配置对话框步骤为:Run > D ...

  9. Eclipse调试多线程代码

    Eclipse调试多线程代码 标签: eclipse 调试 多线程 | 发表时间:2013-02-16 05:51 | 作者:czjuttsw 分享到: 出处:http://blog.csdn.net ...

  10. eclipse debug 执行到断点处并没有停下,断点无效问题

    eclipse debug 执行到断点处并没有停下,断点无效问题 现象: 利用eclipse debug时,执行到断点处并没有停下.正常情况下,在Eclipse中设置断点时,上面显示的是一个对号和一个 ...

最新文章

  1. BZOJ1491: [NOI2007]社交网络(Floyd 最短路计数)
  2. 下一代构建工具 Gradle ,比 Maven 强在哪里!
  3. Revisiting Salient Object Detection: Simultaneous Detection, Ranking, and Subitizing of Multiple Sal
  4. Java编程基础-运算符
  5. 理解在javascript中的内存泄露
  6. 检测IAT HOOK思路
  7. MVC后台创建Json(List),前台接受并循环读取
  8. 牛客 - 双流机场(思维)
  9. compress后的bytearray再decode变大_笔记本电脑风扇噪音变大的原因及其解决办法
  10. java 实现超时_如何实现带有超时的Runnable? - java
  11. Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
  12. c语言中短路逻辑有与有或例子,C语言零基础教程之运算符和表达式,全面解析,轻松上手...
  13. 印象笔记如何分享链接_印象笔记共享问题解决经过
  14. c 连接mysql云数据库_直击DTCC | 《MySQL云数据库架构设计与实践》主题分享
  15. 【数据科学竞赛入门】从往届腾讯广告大赛看如何入坑数据挖掘竞赛
  16. 【数据结构:树】——搜索二叉树-K模型(非递归和递归)
  17. Axure学习笔记整理5-灯箱效果
  18. 【LeetCode】马三来刷题之Valid Anagram
  19. 水管工游戏:dfs(递归)
  20. bde访问64位oracle,Delphi5企业版使用BDE访问Oracle方法

热门文章

  1. Mybatis根据经度、纬度查询距离最近一个位置(Mysql )
  2. 软件工程阶段性总结(四)——测试和维护
  3. 一篇文章搞定支付宝网页支付!
  4. 如何看误差累积分布图
  5. QQ、微信、QQ浏览器UserAgent
  6. 计算机网络网桥模拟课程设计,网桥模拟实验
  7. kvm windows 驱动安装
  8. Scrapy爬虫四步法:爬取51job网站
  9. 易基因 | 表观技术:单细胞及微量细胞全基因组重亚硫酸盐甲基化测序(scWGBS)
  10. idea 删除当一行或者选中行的快捷键