您的位置:首页 > 编程语言 > Java开发

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

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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: