文档章节

线程信息的获取和设置

柳哥
 柳哥
发布于 2015/04/18 22:25
字数 524
阅读 69
收藏 3

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()方法来修改它们。

© 著作权归作者所有

共有 人打赏支持
上一篇: 线程的中断
柳哥
粉丝 206
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
ASP.NET 谨用 async/await

C# 5.0 引入 async/await 关键字,旨在简化异步编程模型,抛去语法糖就是 Net4.0 的 Task + 状态机。其实在处理异步编程使用 Task 还是挺简单的,不过既然推出了新的语法糖,难免会尝试一下,...

BeckJin
01/07
0
0
Java并发编程初级篇(二):Java线程基本信息

Thread类的基本信息: ID:线程唯一标识符 Name:线程名称 Priority:线程对象的优先级。范围为从1到10,其中1为最低优先级,10为最高优先级。 Status:线程的状态。在Java中线程有6种状态:...

阿拉德大陆的魔法师
2016/11/21
26
0
使用 Java Debug Interface(JDI)调试多线程应用程序

本文对 Java Debug Interface(JDI)及其使用进行了介绍,并通过实现一个多线程分析器的示例应用,演示了如何利用 JDI 开发自己的多线程调试程序。该示例分析器在独立于目标程序的前提下,以...

红薯
2009/10/11
433
0
优雅的使用 ThreadLocal

前言 在我们日常 开发中难免遇到需要把一个参数层层的传递到最内层,然后中间层根本不需要使用这个参数,或者是仅仅在特定的工具类中使用,这样我们完全没有必要在每一个方法里面都传递这样一...

方志朋
11/09
0
0
JDK8并发包新增StampedLock锁

4.8 JDK8新增的StampedLock锁探究 StampedLock是并发包里面jdk8版本新增的一个锁,该锁提供了三种模式的读写控制,三种模式分别如下: 写锁writeLock,是个排它锁或者叫独占锁,同时只有一个...

今天你不奋斗明天你就落后
2017/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
58分钟前
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
16
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
10
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部