Java并发编程学习2
2013-10-21 16:11
399 查看
通过这段代码可以了解线程各个阶段的状态:
线程类:
package Test; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.lang.Thread.State; public class MyTest { final private static int threadNum = 10; public static void main(String[] args){ Thread threads[] = new Thread[10]; PrintWriter pw = null; Thread.State status[] = new Thread.State[10]; FileWriter fileWriter = null; try { fileWriter = new FileWriter("log.txt"); pw = new PrintWriter(fileWriter); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } for (int i = 0; i < threadNum; i++) { Caculator caculator = new Caculator(i); threads[i] = new Thread(caculator); if (i%2 == 0 ) { threads[i].setPriority(Thread.MAX_PRIORITY); } else { threads[i].setPriority(Thread.MIN_PRIORITY); } threads[i].setName("thread"+i); } for (int i=0; i<threadNum; i++){ pw.println("Main : Status of Thread "+i+" : " +threads[i].getState()); status[i]=threads[i].getState(); threads[i].start(); } boolean finish=false; while (!finish) { for (int i=0; i<threadNum; i++){ if (threads[i].getState()!=status[i]) { writeThreadInfo(pw, threads[i],status[i]); status[i]=threads[i].getState(); } } finish=true; for (int i=0; i<10; i++){ finish=finish && (threads[i].getState()==State.TERMINATED); } } pw.close(); try { fileWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void writeThreadInfo(PrintWriter pw, Thread thread, State state) { pw.printf("Main : Id %d - %s\n",thread.getId(),thread.getName()); pw.printf("Main : Priority: %d\n",thread.getPriority()); pw.printf("Main : Old State: %s\n",state); pw.printf("Main : New State: %s\n",thread.getState()); pw.printf("Main : ************************************\n"); } }
线程类:
package Test; public class Caculator implements Runnable{ private int number; public Caculator(){ number = 0; } public Caculator(int num){ number = num; } public void run() { for(int i=0; i<10;++i){ System.out.printf("i=%d,thread:%s.\n",i,Thread.currentThread().getName()); } } }
相关文章推荐
- Eclipse使用笔记和问题记录
- JAVA annotation入门基础
- 深入解析java虚拟机-jvm运行机制
- Spring AOP应该用到Spring MVC上不起作用?怎么才能让aop起作用
- java常用转义字符
- Java:List,ArrayList和LinkList的区别
- 【Java工程师之路】[2-2.2]数据库设计和ER模型
- java线程的实现方式
- java转义符同样的代码在cmd下和eclipse下运行结果不同
- Eclipse安装插件的“最好方法”:dropins文件夹的妙用
- 在Java中实现UDP协议编程(DatagramSocket/DatagramPacket)
- struts2:Unable to load configuration.......WEB-INF/lib/struts2-core-2.2.1.jar!/struts-default.xml:48
- java 实现二叉树的可视化
- windows下使用Eclipse运行MapReduce程序出错: Failed to set...
- myeclipse10 中修改html,servlet,jsp等的生成模板
- 解决Mac上eclipse安卓模拟器emulator-5554 disconnected!
- 【Java工程师之路】[2-2.1]数据库数据建模
- java访问修饰符详解
- 利用java程序模拟登陆新浪微博
- Servlet总结(二)