【Java】使用Junit测试线程过程中出现的小问题
2015-06-09 15:37
645 查看
本文内容介绍在使用Junit进行线程测试的时候出现的一个小问题,自己简单做一个记录,以便后续查看
在使用java编写多线程并发实验程序时在Juint写了测试程序,但并没有得到预想的效果。
直接上代码
线程类:
[sm.examples.threaddemo.Thread1][Thread-0] - -----in while------0
[sm.examples.threaddemo.Thread1][Thread-1] - -----in while------0
使用main函数进行测试,实现了预想的效果。简单思考了一下,感觉是测试类中的test方法中启动了两个线程之后自己也结束了,所以启动的线程在控制台也不能输出内容了。
于是修改了一下代码,在测试类的test方法中加入休眠等待,在控制台输出了预期效果。
修改后代码:
在使用java编写多线程并发实验程序时在Juint写了测试程序,但并没有得到预想的效果。
直接上代码
线程类:
package sm.examples.threaddemo; import org.apache.log4j.Logger; public class Thread1 implements Runnable { private static final Logger logger = Logger.getLogger(Thread1.class); @Override public void run() { int i = 0; while (true) { logger.info("-----in while------" + i++); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if (i == 50) { break; } } } }测试类:
package sm.test; import org.apache.log4j.Logger; import org.junit.Test; import sm.examples.threaddemo.Thread1; public class TestThreadDemo { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(TestThreadDemo.class); @Test public void test() { Thread1 thread1 = new Thread1(); Thread t1 = new Thread(thread1); Thread t2 = new Thread(thread1); t1.start(); t2.start(); } }原本预想执行之后两个线程会交替的在控制台打印出0-49,但实际上只是各自打印出了
[sm.examples.threaddemo.Thread1][Thread-0] - -----in while------0
[sm.examples.threaddemo.Thread1][Thread-1] - -----in while------0
使用main函数进行测试,实现了预想的效果。简单思考了一下,感觉是测试类中的test方法中启动了两个线程之后自己也结束了,所以启动的线程在控制台也不能输出内容了。
于是修改了一下代码,在测试类的test方法中加入休眠等待,在控制台输出了预期效果。
修改后代码:
package sm.test; import org.apache.log4j.Logger; import org.junit.Test; import sm.examples.threaddemo.Thread1; public class TestThreadDemo { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(TestThreadDemo.class); @Test public void test() { Thread1 thread1 = new Thread1(); Thread t1 = new Thread(thread1); Thread t2 = new Thread(thread1); t1.start(); t2.start(); try { logger.info("in test"); Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- eclipse打开文件位置插件
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- java基础复习之六:数据类型的转换
- spring中的命名空间
- Ubuntu配置eclipse
- Spring常用注解,自动扫描bean
- maven+springMVC+mybatis+junit详细搭建过程
- SpringMVC整合fastjson-1.1.41
- spring使用注解实现AOP
- 杭电ACM2023java做法
- spring的编程式事务、XML配置事务、注解实现事务
- Mybatis学习(5)与spring3集成
- spring的数据源配置DBCP,C3PO,BoneCP
- 如果debug 启动spring 时跳到concurrentHashMap中……
- Spring Bean的5种作用域
- java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承, 请说出他们分别是哪些类?
- Ubuntu系统下安装Myeclipse10.6
- java 线程池
- 什么是 java 序列化,如何实现 java 序列化?
- Java文件操作大全(转载的)