java并发编程-1.2线程信息获取和设置(ID,名称、优先级、状态)

本文探讨了Java并发编程中线程信息的获取和设置,包括线程ID、名称、优先级和状态的详细说明。通过实例展示了如何在代码中操作这些属性,并记录线程状态变化。
摘要由CSDN通过智能技术生成

乘法表运算显示在控制台上,每个线程的状态改变记录在log.txt中。

代码如下:

package sec01;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

//线程信息的获取和设置
public class Calculator2 implements Runnable {  
    private int number;  
    public Calculator2(int number){  
        this.number = number;  
    }  
      
  //编写writeThreadInfo()方法,用于写下线程的ID、名称、优先级、旧状态和新状态
    private static void writeThreadInfo(PrintWriter pw, Thread thread,Thread.State state){
    	pw.write("Main : Id "+thread.getId()+" - "+thread.getName()+"\n");
    	pw.write("Main : Priority: "+thread.getPriority()+"\n");
    	pw.write("Main : Old State: "+state+"\n");
    	pw.write("Main : New State: "+thread.getState()+"\n");
    	pw.write("Main : ***************************\n");    	
    }
    
    @Override  
    public void run() {  
        // TODO Auto-generated method stub  
        for(int i =1; i<=10;i++){  //循环与number相乘并打印
            System.out.printf("%s: %d * %d = %d\n", Thread.currentThread().getName(),number,i,i*number);  
        }  
    }  
      
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        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 {
			PrintWriter printWriter = new PrintWriter(".\\sec01\\log.txt");//记录文件路径
			
			for(int i=0; i<10; i++){
				status[i] = threads[i].getState();
				printWriter.write("Main : status of Thread "+" : "+i+ " : "+status[i]+"\n");
			}
			
			//开始执行10个线程
	        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(printWriter, threads[i], status[i]);
	        			status[i] = threads[i].getState();
	        		}
	        	}
	        	
	        	finish=true;
	        	for(int i=0; i<10; i++){//直到10个线程均执行完毕,finish才为true
	        		finish = finish && (threads[i].getState()==Thread.State.TERMINATED); //若线程执行结束,则finish置为true
	        	}
	        }
	        
	        printWriter.flush();
	        printWriter.close();
		} catch (IOException e) {
			// TODO Auto-g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值