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