Thread类有一些保存信息的属性,这些属性可以用来标识线程,显示线程的状态或者控制线程的优先级。
ID:保存了线程的唯一标识符。
Name:保存了线程名称。
Priority:保存了线程对象的优先级。线程的优先级是从1到10,其中1是最低优先级;10是最高优先级。我们并不推荐去改变线程的优先级,然而,在需要的时候,也可以这么做。
Status:保存了线程的状态。在Java中,线程的状态有6种:new,runnable,blocked,waiting,time waiting或者terminated。
示例:
package concurrency;import java.io.FileWriter;import java.io.PrintWriter;import java.lang.Thread.State;public class Test3 { 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 Calculator2(i)); if(i % 2 == 0) { threads[i].setPriority(Thread.MAX_PRIORITY); } else { threads[i].setPriority(Thread.MIN_PRIORITY); } threads[i].setName("Thread " + i); } try(FileWriter file = new FileWriter("/home/fuhd/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(Exception e){ e.printStackTrace(); } } 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"); }}class Calculator2 implements Runnable { private int number; public Calculator2(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); } }}
Thread类的属性存储了线程的所有信息。JVM使用线程的priority属性来决定某一刻由哪个线程来使用CPU,并且根据线程的情景为它们设置实际状态。
如果没有为线程指定一个名字,JVM将自动给它分配一个名字,格式是Thread-XX,其中XX是一组数字。线程的ID和状态是不允许被修改的,线程类没有提供setId()和setStatus()方法来修改它们。