博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程信息的获取和设置
阅读量:7234 次
发布时间:2019-06-29

本文共 2857 字,大约阅读时间需要 9 分钟。

  hot3.png

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

转载于:https://my.oschina.net/fhd/blog/403421

你可能感兴趣的文章
TP5实现支付宝电脑网站支付学习笔记
查看>>
如何绘制最美的鱼骨图?
查看>>
import提升导致Fundebug报错:“请配置apikey”
查看>>
GitBash连接GitHub
查看>>
vscode 中对vue进行格式化
查看>>
为什么 kubernetes 天然适合微服务 (2)
查看>>
EMQ 配置
查看>>
Python--面向对象进阶
查看>>
偏向锁状态转移原理
查看>>
Angular5升级至Angular7
查看>>
通过VuePress管理项目文档(一)
查看>>
webpack-chain项目中文翻译
查看>>
JavaScript 数组操作方法小结
查看>>
关于 ClojureScript 裸写 stateful React Component
查看>>
gson-plugin深入源码分析(三)
查看>>
leetcode-846-Hand of Straights
查看>>
rpm包管理功能全解
查看>>
web前端开发编码规范及性能优化
查看>>
安装LNMP开发环境
查看>>
谈谈前端性能优化(一)
查看>>