junit测试和main方法多线程中遇到的问题
2017-10-26 16:03
393 查看
利用Junit测试多线程时经常遇到任务运行不完就会停止,下面是我的任务线程类:
然后我又用main方法重新执行了一次多线程任务,就不会有无缘无故停止的问题,main方法调用多线程的代码:
最后查了好多文章资料还看了源代码,得出结论Junit测试时也是用的main方法 main方法停止线程就会停止,所以多线程时慎用Junit测试
package timerTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; /** * * created on 2017年10月26日 * * @author zhujixiang * @version 1.0 * @since JDK 1.8.0_112 */ public class TaskDemo implements Runnable { public TaskDemo() { super(); // TODO Auto-generated constructor stub } private File file; public TaskDemo(File file) { super(); this.file = file; } @Override public void run() { try { BufferedReader br = new BufferedReader(new FileReader(file)); File dir = new File(file.getParent() + "\\" + file.getName().replace(".txt", "")); System.out.println(Thread.currentThread().getName() + "=======" + dir); if (!dir.exists()) { dir.mkdirs(); } String string = null; while ((string=br.readLine())!=null) { //JSONObject json = JSONObject.fromObject(string); System.out.println(string); outFile(string, dir); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void outFile(String string, File dir) throws Exception { //JSONObject json = JSONObject.fromObject(string); Map<String, Object> map = (Map<String, Object>) JSON.parse(string); Set<Entry<String, Object>> set = map.entrySet(); List<String> keyList = new ArrayList<>(); // 查询出所有的key值,排除Id字段;并把有效key值存入list; for (Entry<String, Object> entry : set) { Object value = entry.getValue(); // System.out.println(value.toString()); if (value.toString().length() != 7) { keyList.add(entry.getKey()); } } // 遍历keylist 每个key是一张表,为每一张表创建一个文件 for (String tableName : keyList) { // 创建文件 /* * File file=new File(dir); if (!file.exists()) { file.mkdirs(); } */ File f = new File(dir, tableName + ".txt"); // 使用字符缓冲流增加效率 BufferedWriter out = new BufferedWriter(new FileWriter(f)); // 根据表名获取所有的字段以及值的list集合 Object object = map.get(tableName); List<Map> list2 = JSONArray.parseArray(object.toString(), Map.class); String str = ""; System.out.println(tableName); // 遍历list集合得到所有字段的值 拼接字符串 for (Map map2 : list2) { Collection values = map2.values(); for (Object object2 : values) { str += object2 + ","; } str = str.substring(0, str.length() - 1); str += "\r"; } str = str.substring(0, str.length() - 1); // 把字符串写进文件 out.write(str); out.close(); } } }
**利用Junit测试运行线程任务时就会发生任务运行不完就无缘无故的停止,下面是Junit测试代码:**
@Test public void test() { File f=new File("D:\\img"); File[] files = f.listFiles(); ExecutorService service = Executors.newFixedThreadPool(5); for (File file2 : files) { if(file2.getName().endsWith(".txt")){ TaskDemo td=new TaskDemo(file2); Thread t=new Thread(td); //t.start(); service.submit(t); } } service.shutdown(); }
然后我又用main方法重新执行了一次多线程任务,就不会有无缘无故停止的问题,main方法调用多线程的代码:
public static void main(String[] args) throws Exception { Timer timer=new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { System.out.println(new Date().toLocaleString()+"======================================="); File f=new File("D:\\img"); File[] files = f.listFiles(); ExecutorService service = Executors.newFixedThreadPool(5); for (File file2 : files) { if(file2.getName().endsWith(".txt")){ TaskDemo td=new TaskDemo(file2); Thread t=new Thread(td); //t.start(); service.submit(t); } } service.shutdown(); } },2000,4000); //run2(); }
最后查了好多文章资料还看了源代码,得出结论Junit测试时也是用的main方法 main方法停止线程就会停止,所以多线程时慎用Junit测试
相关文章推荐
- junit测试和main方法测试线程问题
- his测试 junit原来不能用的问题解决方法 及 eclipse开发加速小技巧 (from victor)
- VC8下多线程环境中AfxGetMainWnd()返回空指针问题及解决方法
- Junit测试多线程的问题
- 编译mysql测试文件时遇到的小问题及解决方法
- 软件测试中遇到的常见问题及沟通方法
- [笔记]--BDD测试使用Capybara遇到的问题及解决方法
- VC2008下多线程环境中AfxGetMainWnd()返回空指针问题及解决方法
- Junit测试含有‘启动新线程’这一操作的方法时瞬间结束的问题
- 在main方法中启动TestNG测试时build path的问题
- 遇到问题-----maven项目右键运行或者run as运行main方法找不到类
- junit测试中方法不运行问题所在
- 用robotframework + selenium2library做自动化测试遇到的一些问题,及解决方法。
- 软件测试中遇到的常见问题及沟通方法
- WEbService服务端-用Axis客户端测试遇到的问题Exception in thread "main" AxisFault
- 安装、配置和测试Asterisk过程中遇到的问题及解决方法
- Struts2+Spring 整合成功测试案例--整合过程中遇到的问题及解决方法(一)
- 软件测试中遇到的常见问题及沟通方法
- Junit 测试 Spring 遇到的问题
- VC8下多线程环境中AfxGetMainWnd()返回空指针问题及解决方法