1.2线程信息的获取和设置

本文通过创建多个具有不同优先级的线程并记录其状态变化的过程,演示了Java中线程状态的变化以及优先级对线程调度的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 : **************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值