Java并发学习之二——获取和设置线程信息

本文是学习网络上的文章时的总结,感谢大家无私的分享。

Thread类的对象中保存了一些属性信息能够帮助我们辨别每一个线程,知道它的一些信息

ID:每个线程的独特标示;

Name:线程的名称;

Priority:线程对象的优先级。优先级别在1-10之间,1是最低级,10是最高级。

Status:线程状态。在java中,线程只有6种状态:new,runnable,blocked,waiting,time
waiting 或terminated。

现在写一个程序,将线程的信息保存到文件中方便查看

package chapter;

public class Calculator2 implements Runnable{

	private int number;
	public Calculator2(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);
		}
	}
}
package chapter;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.lang.Thread.State;

public class Main2 {

	/**
	 * <p>
	 * </p>
	 * @author zhangjunshuai
	 * @date 2014-8-8 下午3:36:20
	 * @param args
	 */
	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{
			FileWriter file = new FileWriter(".\\xianchenglog1.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]);
					}
				}
				finish = true;
			}
			pw.close();
		}catch(Exception e){

		}

	}
	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");

		}

}

Java并发学习之二——获取和设置线程信息,布布扣,bubuko.com

时间: 2024-10-06 03:40:41

Java并发学习之二——获取和设置线程信息的相关文章

java 22 - 5 多线程之获取和设置线程对象的名称

如何获取线程对象的名称呢? public final String getName():获取线程的名称.如何设置线程对象的名称呢? public final void setName(String name):设置线程的名称针对不是Thread类的子类中如何获取线程对象名称呢? public static Thread currentThread():返回当前正在执行的线程对象 Thread.currentThread().getName() public final String getNam

java线程复习2(获取和设置线程信息)

Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程,知道它的状态,调整控制其优先级. 这些属性是: ID: 每个线程的独特标识. Name: 线程的名称. Priority: 线程对象的优先级.优先级别在1-10之间,1是最低级,10是最高级.不建议改变它们的优先级,但是你想的话也是可以的. Status: 线程的状态.在Java中,线程只能有这6种中的一种状态: new, runnable, blocked, waiting, time waiting, 或 terminat

Java Web学习(二) Eclipse的配置

Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后根据windows系统32位或64位,进行选择(建议64位).如果你的机器内存过小,可以选择Eclipse的旧版本:Eclipse Indigo .Eclipse Juno . Eclipse Kepler 等版本. 2.解压缩安装 打开压缩包,将里面的Eclipse 拖出到指定位置,进行解压缩.

Java并发学习之七——守护线程

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.Java有两种Thread:"守护线程Daemon"与"用户线程User".用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开:守护线程:则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去. 2.setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,此方法必须在线程启动之前调用,当线程正在运行时调用

Java并发学习之三——线程的中断

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.一个多个线程在执行的Java程序,只有当其全部的线程执行结束时(更具体的说,是所有非守护线程结束或者某个线程调用System.exit()方法的时候),它才会结束运行.有时,你需要为了终止程序而结束一个线程,或者当程序的用户想要取消某个Thread对象正在做的任务. 2.Java提供中断机制来通知线程表明我们想要结束它.中断机制的特性是线程需要检查是否被中断,而且还可以决定是否相应结束的请求.所以,线程可以忽略中断请求并且继续运行. 3.

Java 并发学习之 JMM

Java 并发学习之 JMM 顺序一致性模型与 JMM 顺序一致性模型是一种理想的内存模型,在这个模型下,指令是严格按照代码的编写顺序执行,同时所有线程只能看到同一个内存区且对内存区的操作都是互斥的,内存对所有线程都是可见的. JMM 中,由于每个线程有自己的工作内存,很多情况下,只是对工作内存中的变量副本进行修改而未真正同步到主内存中,因此每个线程对内存的更改对其他线程都是不可见的,同时出于对性能的优化,指令的顺序经过编译器和处理器的重排,其执行的顺序跟代码的编写顺序很有可能不一样.所以导致了

Java并发学习之五——线程的睡眠和恢复

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.Thread类的sleep方法,可以使线程睡眠.此方法接收一个整数作为参数,表示线程暂停运行的毫秒数.在调用sleep方法后,当时间结束时,JVM会安排他们CPU时间,线程会继续按指令执行. 另一种可能是使用一个有TimeUnit列举元素的sleep方法,使用线程类的sleep方法让当前线程睡眠,但是它接收的参数单位后会转成毫秒的. 2.当你调用sleep()方法,Thread离开CPU并在一段时间内停止运行.在这段时间内,他是不消耗CP

Java并发学习笔记(九)-原子类AtomicInteger

AtomicInteger能够保证对一个整型的操作是原子性.像i++这个操作不是原子操作,存在竞态条件,所以需要加锁,但是加锁的性能不高,如果仅仅为了对一个整数加1.我们来看下他的实现. private volatile int value; AtomicInteger本身持有一个整型变量,所有的操作都是基于这个变量的.变量由violate修饰,这个变量是保证可见性的,具体可见另一篇博客 Java并发学习笔记(六)-互斥性和内存可见性. 来看一下对value加1的操作 public final

Java并发学习之四——操作线程的中断机制

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.如果线程实现的是由复杂算法分成的一些方法,或者他的方法有递归调用,那么我们可以用更好的机制来控制线程中断.为了这个Java提供了InterruptedException异常.当你检测到程序的中断并在run()方法内捕获,你可以抛这个异常. 2.InterruptedException异常是由一些与并发API相关的Java方法,如sleep()抛出的. 下面以程序解释 package chapter; import java.io.File