Java线程状态
2016-03-06 19:28
337 查看
参考文章:/article/7447019.html
Thread类有一些保存信息的属性,这些属性可以用来标识线程,显示线程的状态或者控制线程的优先级。
ID:保存了线程的唯一表示符。
Name:保存了线程名称
Priority:保存了线程对象的优先级。线程的优先级是从1到10,其中1是最低优先级;10是最高优先级。
Status:保存了线程的状态。在Java中,线程的状态有6种:new、runnable、blocked、waiting、time waiting或者terminated
Main.java
Calculator.java
Thread类有一些保存信息的属性,这些属性可以用来标识线程,显示线程的状态或者控制线程的优先级。
ID:保存了线程的唯一表示符。
Name:保存了线程名称
Priority:保存了线程对象的优先级。线程的优先级是从1到10,其中1是最低优先级;10是最高优先级。
Status:保存了线程的状态。在Java中,线程的状态有6种:new、runnable、blocked、waiting、time waiting或者terminated
Main.java
package org.lf.demo2; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.lang.Thread.State; public class Main { public static void main(String args[]){ Thread threads[] = new Thread[10] ; Thread.State status[] = new Thread.State[10] ; for(int i=0;i<10;i++){ threads[i] = new Thread(new Calculator(i)) ; if((i%2)==0){ threads[i].setPriority(Thread.MAX_PRIORITY) ; }else{ threads[i].setPriority(Thread.MIN_PRIORITY) ; } threads[i].setName("Thread "+i) ; } FileWriter file = null; try { file = new FileWriter(".\\data\\log.txt"); } catch (IOException e) { e.printStackTrace(); } //PrintWriter能够实现自动刷新 PrintWriter pw = new PrintWriter(file,true) ; for(int i=0;i<10;i++){ pw.println("Main : Status of Thread "+i+" : " + threads[i].getState()) ; } for(int i=0;i<10;i++){ threads[i].start() ; } boolean finish = false ; while(!finish){ for(int i=0;i<10;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) ; } } } 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 : ***********************************************\n") ; } }
Calculator.java
package org.lf.demo2; public class Calculator implements Runnable{ private int number ; public Calculator(int number){ this.number = number ; } @Override public void run() { for(int i=1;i<=10;i++){ System.out.printf("%s: %d * %d = %d\n",Thread.currentThread().getName(),number,i,i*number); } } }
相关文章推荐
- JAVA-内部类
- 【JAVA集合】ArrayList
- org.springframework.beans.factory.CannotLoadBeanClassException
- 使用spring webflow遇到的问题-3
- Java开发文档的使用与Hashcode的入门(老鸟勿进)
- [学习笔记】Java Numbers类与Math类
- Java并发编程笔记 Native方法,CAS操作与ABA问题
- (java) Single Number II
- Spring MVC之@PathVariable @RequestHeader, @CookieValue@RequestParam @RequestBody @RequestHeader 等详解
- eclipse调试
- Java-猜拳游戏
- Spring JDBC 例子
- struts2学习笔记-------为action的属性注入值
- 为何要学习Java语言
- spring 依赖注入四种方式
- java学习笔记
- Java I/O学习(附实例和详解)
- Java I/O学习(附实例和详解)
- Java I/O学习(附实例和详解)
- Java I/O学习(附实例和详解)