1.2线程信息的获取和设置

来源:互联网 发布:gzip linux 编辑:程序博客网 时间:2024/06/05 18:36

1.创建一个实现Runnable接口的Calculate类

public class Calculate implements Runnable{    private int number;    public Calculate(int number)    {        this.number=number;    }    @Override    public void run() {        // TODO Auto-generated method stub        for(int i=0;i<10;i++)        {            System.out.printf("%s:%d * %d=%d\n",Thread.currentThread().getName(),                    number,i,i*number);        }    }}

2.主类的实现

import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.lang.Thread.State;public class TestThreadInfo {    /**     * Main method of the example     * @param args     */    public static void main(String[] args) {        //输出线程优先级信息         System.out.printf("Minimum Priority: %s\n",Thread.MIN_PRIORITY);        System.out.printf("Normal Priority: %s\n",Thread.NORM_PRIORITY);        System.out.printf("Maximun Priority: %s\n",Thread.MAX_PRIORITY);        Thread threads[];        Thread.State status[];        //操作10线程,其中5个优先级设置为最大        //5个优先级设置为最小        threads=new Thread[10];        status=new Thread.State[10];        for (int i=0; i<10; i++){            threads[i]=new Thread(new Calculate(i));            if ((i%2)==0){                threads[i].setPriority(Thread.MAX_PRIORITY);            } else {                threads[i].setPriority(Thread.MIN_PRIORITY);            }            //设置线程的名字            threads[i].setName("Thread "+i);        }        // Wait for the finalization of the threads. Meanwhile,         // write the status of those threads in a file        try (FileWriter file = new FileWriter(".\\data\\log.txt");PrintWriter pw = new PrintWriter(file);){            for (int i=0; i<10; i++){                pw.println("Main : Status of Thread "+i+" : "+threads[i].getState());                status[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);                }            }        } catch (IOException e) {            e.printStackTrace();        }    }    /**     *  This method writes the state of a thread in a file     * @param pw : PrintWriter to write the data     * @param thread : Thread whose information will be written     * @param state : Old state of the thread     */    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");    }}

3.输入到log.txt中的结果

Main : Status of Thread 0 : NEW
Main : Status of Thread 1 : NEW
Main : Status of Thread 2 : NEW
Main : Status of Thread 3 : NEW
Main : Status of Thread 4 : NEW
Main : Status of Thread 5 : NEW
Main : Status of Thread 6 : NEW
Main : Status of Thread 7 : NEW
Main : Status of Thread 8 : NEW
Main : Status of Thread 9 : NEW
Main : Id 10 - Thread 0
Main : Priority: 10
Main : Old State: NEW
Main : New State: BLOCKED
Main : **************************
Main : Id 11 - Thread 1
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : **************************
Main : Id 12 - Thread 2
Main : Priority: 10
Main : Old State: NEW
Main : New State: TERMINATED
Main : **************************
Main : Id 13 - Thread 3
Main : Priority: 1
Main : Old State: NEW
Main : New State: TERMINATED
Main : **************************
Main : Id 14 - Thread 4
Main : Priority: 10
Main : Old State: NEW
Main : New State: BLOCKED
Main : **************************
Main : Id 15 - Thread 5
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : **************************
Main : Id 16 - Thread 6
Main : Priority: 10
Main : Old State: NEW
Main : New State: TERMINATED
Main : **************************
Main : Id 17 - Thread 7
Main : Priority: 1
Main : Old State: NEW
Main : New State: TERMINATED
Main : **************************
Main : Id 18 - Thread 8
Main : Priority: 10
Main : Old State: NEW
Main : New State: BLOCKED
Main : **************************
Main : Id 19 - Thread 9
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : **************************
Main : Id 15 - Thread 5
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : **************************
Main : Id 18 - Thread 8
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : **************************
Main : Id 19 - Thread 9
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : **************************
Main : Id 11 - Thread 1
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : **************************
Main : Id 18 - Thread 8
Main : Priority: 10
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : **************************
Main : Id 14 - Thread 4
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : **************************
Main : Id 14 - Thread 4
Main : Priority: 10
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : **************************
Main : Id 10 - Thread 0
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: TERMINATED
Main : **************************
Main : Id 19 - Thread 9
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: TERMINATED
Main : **************************
Main : Id 11 - Thread 1
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: TERMINATED
Main : **************************
Main : Id 15 - Thread 5
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: TERMINATED
Main : **************************

0 0