文档章节

线程信息的获取和设置

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

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

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 202
博文 394
码字总数 347782
作品 0
杭州
技术主管
ASP.NET 谨用 async/await

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

BeckJin ⋅ 01/07 ⋅ 0

java基础10(多线程2)

线程的常用方法 public final void join() 线程加入 作用:等待该线程中止,其他线程才能继续抢着执行 public static void yield(): 线程礼让 作用:暂停当前正在执行的线程对象,并执行其他...

给我妖刀 ⋅ 2017/05/24 ⋅ 0

Gnu/Linux系统C编程之 - 系统与进程信息

这里主要介绍/proc伪文件系统及uname()函数来获取系统或进程的一些信息。 /proc文件系统介绍 在早期的UNIX发行版中,并不能很容易的分析内核的一些属性,并且很难回答以下问题: 系统有多少进...

bigstone2012 ⋅ 2016/05/25 ⋅ 0

Java并发编程初级篇(二):Java线程基本信息

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

阿拉德大陆的魔法师 ⋅ 2016/11/21 ⋅ 0

JDK8并发包新增StampedLock锁

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

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

session 概率性混乱

A帐户在A电脑上登录 显示自己的信息 B帐户在B电脑上登录 显示自己的信息 过一会儿,A帐户刷新页面,出现了B帐户的用户基本信息 跟踪发现,session串掉了 使用Strtus2, session是使用Servlet...

小小晋 ⋅ 2012/01/17 ⋅ 7

浅谈Java并发编程系列(九)—— AQS结构及原理分析

AQS介绍 AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。来看下同步组件对AQS的使用: AQS是一个抽象类,主是是以继承的方式使用。AQS本...

codershamo ⋅ 2017/02/24 ⋅ 0

使用 Java Debug Interface(JDI)调试多线程应用程序

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

红薯 ⋅ 2009/10/11 ⋅ 0

SNMP4J实时获取CPU信息的时间间隔

@xuzhike1979 你好,想跟你请教个问题:请问SNMP4J实时获取CPU等信息的时间间隔如何设置?是根据它上次获取的时长长短来决定的吗?小弟就是上次问你的那个问题,做了一个用SNMP4J获取CPU等信...

東刀人 ⋅ 2012/12/21 ⋅ 9

多线程编程之线程绑定处理器核

Linux系统提供API函数schedsetaffinity和schedgetaffinity用于设置或获取线程的可以使用的CPU核。 int schedsetaffinity(pidt pid, unsigned int cpusetsize, cpusett *mask); 这个函数中pid......

省委书记沙瑞金 ⋅ 2013/04/02 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 27分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 32分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 51分钟前 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 53分钟前 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 53分钟前 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 58分钟前 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 58分钟前 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 59分钟前 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 今天 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部