Java并发学习之二——获取和设置线程信息

文章转载为http://blog.csdn.net/junshuaizhang/article/details/38443315,供自己学习用

Thread类的对象中保存了一些属性信息能够帮助我们辨别每一个线程,知道它的一些信息

ID:每个线程的独特标示;

Name:线程的名称;

Priority:线程对象的优先级。优先级别在1-10之间,1是最低级,10是最高级。

Status:线程状态。在Java中,线程只有6种状态:new,runnable,blocked,waiting,time waiting terminated

 

现在写一个程序,将线程的信息保存到文件中方便查看

 1 package chapter;
 2 
 3 public class Calculator2 implements Runnable{
 4 
 5     private int number;
 6     public Calculator2(int number){
 7         this.number = number;
 8     }
 9     
10     @Override
11     public void run() {
12         // TODO Auto-generated method stub
13         for (int i = 0; i < 10; i++) {
14             System.out.printf("%s:%d*%d = %d\n",Thread.currentThread().getName(),number,i,i*number);
15         }
16     }
17 }

 

 1 package chapter;
 2 import java.io.FileWriter;
 3 import java.io.PrintWriter;
 4 import java.lang.Thread.State;
 5 
 6 public class Main2 {
 7 
 8     /**
 9      * <p>
10      * </p>
11      * @author zhangjunshuai
12      * @date 2014-8-8 下午3:36:20
13      * @param args
14      */
15     public static void main(String[] args) {
16         // TODO Auto-generated method stub
17 
18         Thread[] threads = new Thread[10];
19         Thread.State[] status = new Thread.State[10];
20         for (int i = 0; i < 10; i++) {
21             threads[i] = new Thread(new Calculator2(i));
22             if((i%2) == 0)
23                 threads[i].setPriority(Thread.MAX_PRIORITY);
24             else
25                 threads[i].setPriority(Thread.MIN_PRIORITY);
26             threads[i].setName("Thread"+i);
27         }
28         try{
29             FileWriter file = new FileWriter(".\\xianchenglog1.txt");
30             PrintWriter pw = new PrintWriter(file);
31             for(int i =0;i<10;i++){
32                 pw.println("main: status of thread "+i+": "+threads[i].getState());
33                 status[i] = threads[i].getState();
34             }
35             
36             for(int i =0;i<10;i++){
37                 threads[i].start();
38             }
39             boolean finish = false;
40             while(!finish){
41                 for (int i = 0; i < 10; i++) {
42                     if(threads[i].getState()!=status[i]){
43                         writeThreadInfo(pw,threads[i],status[i]);
44                     }
45                 }
46                 finish = true;
47             }
48             pw.close();
49         }catch(Exception e){
50             
51         }
52         
53         
54     }
55     private static void writeThreadInfo(PrintWriter pw, Thread thread, State state) {
56            pw.printf("Main : Id %d - %s\n",thread.getId(),thread.getName());
57         
58            pw.printf("Main : Priority: %d\n",thread.getPriority());
59         
60            pw.printf("Main : Old State: %s\n",state);
61         
62            pw.printf("Main : New State: %s\n",thread.getState());
63         
64            pw.printf("Main : ************************************\n");
65         
66         }
67 
68 
69 }

 

posted @ 2016-11-08 21:18  java开发者  阅读(267)  评论(0)    收藏  举报