常用线程属性

ID: 每个线程的唯一标识;

Name: 线程名称;

Priority: 线程优先级,从1-10,数字越大优先级越高;不推荐改变线程优先级;

Status: 线程状态,包含6种状态:new, runnable, blocked, waiting, time waiting, terminated

本例中,我们会开发一个程序以设置线程名称和优先级并展示一些线程信息。

Calculator.java

package com.dylan.thread.ch1.c02;

/**
* This class prints the multiplication table of a number
* @author xusucheng
* @create 2018-04-21
**/
public class Calculator implements Runnable{
private int number;
public Calculator(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);
}
} }

Main.java

package com.dylan.thread.ch1.c02;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.Thread.State; /**
* @author xusucheng
* @create 2018-04-21
**/
public class Main { /**
* Main method of the example
* @param args
*/
public static void main(String[] args) { // Thread priority infomation
System.out.printf("Minimum Priority: %s\n",Thread.MIN_PRIORITY);
System.out.printf("Normal Priority: %s\n",Thread.NORM_PRIORITY);
System.out.printf("Maximun Priority: %s\n",Thread.MAX_PRIORITY); Thread threads[];
Thread.State status[]; // Launch 10 threads to do the operation, 5 with the max
// priority, 5 with the min
threads=new Thread[10];
status=new Thread.State[10];
for (int i=0; i<10; i++){
threads[i]=new Thread(new Calculator(i));
if ((i%2)==0){
threads[i].setPriority(Thread.MAX_PRIORITY);
} else {
threads[i].setPriority(Thread.MIN_PRIORITY);
}
threads[i].setName("Thread "+i);
} // Wait for the finalization of the threads. Meanwhile,
// write the status of those threads in a file
try (FileWriter file = new FileWriter("D:\\output\\threadLog.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 (IOException e) {
e.printStackTrace();
}
} /**
* This method writes the state of a thread in a file
* @param pw : PrintWriter to write the data
* @param thread : Thread whose information will be written
* @param state : Old state of the thread
*/
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");
} }

日志文件内容:

Main : Status of Thread 0 : NEW
Main : Status of Thread 1 : NEW
Main : Status of Thread 2 : NEW
Main : Status of Thread 3 : NEW
Main : Status of Thread 4 : NEW
Main : Status of Thread 5 : NEW
Main : Status of Thread 6 : NEW
Main : Status of Thread 7 : NEW
Main : Status of Thread 8 : NEW
Main : Status of Thread 9 : NEW
Main : Id 11 - Thread 0
Main : Priority: 10
Main : Old State: NEW
Main : New State: BLOCKED
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 13 - Thread 2
Main : Priority: 10
Main : Old State: NEW
Main : New State: BLOCKED
Main : ************************************
Main : Id 14 - Thread 3
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 15 - Thread 4
Main : Priority: 10
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 16 - Thread 5
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 17 - Thread 6
Main : Priority: 10
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 18 - Thread 7
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 19 - Thread 8
Main : Priority: 10
Main : Old State: NEW
Main : New State: BLOCKED
Main : ************************************
Main : Id 20 - Thread 9
Main : Priority: 1
Main : Old State: NEW
Main : New State: RUNNABLE
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 14 - Thread 3
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 15 - Thread 4
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 16 - Thread 5
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 17 - Thread 6
Main : Priority: 10
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 18 - Thread 7
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 19 - Thread 8
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 20 - Thread 9
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: BLOCKED
Main : ************************************
Main : Id 13 - Thread 2
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 15 - Thread 4
Main : Priority: 10
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 13 - Thread 2
Main : Priority: 10
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 14 - Thread 3
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: BLOCKED
Main : ************************************
Main : Id 14 - Thread 3
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 20 - Thread 9
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 20 - Thread 9
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 18 - Thread 7
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 17 - Thread 6
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: TERMINATED
Main : ************************************
Main : Id 18 - Thread 7
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 16 - Thread 5
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 11 - Thread 0
Main : Priority: 10
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 11 - Thread 0
Main : Priority: 10
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 16 - Thread 5
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: BLOCKED
Main : New State: RUNNABLE
Main : ************************************
Main : Id 12 - Thread 1
Main : Priority: 1
Main : Old State: RUNNABLE
Main : New State: TERMINATED
Main : ************************************

Java并发编程实例--2.获取和设置线程信息的更多相关文章

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

    本文是学习网络上的文章时的总结,感谢大家无私的分享. Thread类的对象中保存了一些属性信息可以帮助我们辨别每个线程.知道它的一些信息 ID:每一个线程的独特标示: Name:线程的名称: Prio ...

  2. Java并发编程(二)如何保证线程同时/交替执行

    第一篇文章中,我用如何保证线程顺序执行的例子作为Java并发系列的开胃菜.本篇我们依然不会有源码分析,而是用另外两个多线程的例子来引出Java.util.concurrent中的几个并发工具的用法. ...

  3. java并发编程JUC第九篇:CountDownLatch线程同步

    在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...

  4. Java并发编程实例(synchronized)

    此处用一个小程序来说明一下,逻辑是一个计数器(int i):主要的逻辑功能是,如果同步监视了资源i,则不输出i的值,但如果没有添加关键字synchronized,因为是两个线程并发执行,所以会输出i的 ...

  5. Java并发编程原理与实战七:线程带来的风险

    在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源.但使用多线程同时会带来相应的风险,本文将展开讨论. 一.引言 多线程将会带来几个问题: 1.安全性问题 线程安全性可能 ...

  6. Java并发编程原理与实战四:线程如何中断

    如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程. java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下面我们 ...

  7. [Java并发编程之美]第1章 线程基础

    第1章 线程 1.1 线程与进程 进程是操作系统资源分配和调度的基本单位,但cpu资源是分配到线程的,也就是线程是CPU分配的基本单位. 线程自己的栈资源中,存放的局部变量是线程私有的,其他线程无法访 ...

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

    如何获取线程对象的名称呢? public final String getName():获取线程的名称.如何设置线程对象的名称呢? public final void setName(String n ...

  9. 那些年读过的书《Java并发编程实战》一、构建线程安全类和并发应用程序的基础

    1.线程安全的本质和线程安全的定义 (1)线程安全的本质 并发环境中,当多个线程同时操作对象状态时,如果没有统一的状态访问同步或者协同机制,不同的线程调度方式和不同的线程执行次序就会产生不同的不正确的 ...

  10. Java 并发编程中的 Executor 框架与线程池

    Java 5 开始引入 Conccurent 软件包,提供完备的并发能力,对线程池有了更好的支持.其中,Executor 框架是最值得称道的. Executor框架是指java 5中引入的一系列并发库 ...

随机推荐

  1. [转帖]内存管理参数zone_reclaim_mode分析

    zone_reclaim_mode 官方解释 调整方法 调整的影响 官方解释 最近在性能优化,看到了zone_reclaim_mode参数,记录备用 zone_reclaim_mode: Zone_r ...

  2. [转帖]Kafka主题与分区

    https://zhuanlan.zhihu.com/p/428845986#:~:text=%E4%B8%80%E3%80%81kafka-topics.sh%E6%93%8D%E4%BD%9C%2 ...

  3. [转帖]skywalking配置nacos集群模式

    版本: name version nacos 1.1.0 skywalking 6.2.0 elasticsearch 6.3.2 es集群管理工具 cerebro-0.8.3 https://git ...

  4. [转帖]【JVM】Java内存区域与OOM

    引入 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. Java虚拟机运行时数据区 如图所示 1.程序计数器(线程私有 ...

  5. SingleNode HDFS 搭建过程

    背景 1. 纯粹测试 2. 未考虑安全和授权以及数据处理. 3. 单节点最简单的部署, 验证功能连接的可能性 资料获取以及环境变量的设置 获取最新的安装文件 https://downloads.apa ...

  6. 【我在京东做研发】揭秘支撑京东万人规模技术人员协作的行云DevOps平台

    分享人:孙长虹 京东云DevOps解决方案架构师 复旦大学计算机系毕业,并拥有人民大学心理学硕士学位.曾任职于Alcatel-Lucent,IBM和惠普,具有丰富的大型复杂产品研发及项目管理经验,擅长 ...

  7. Vue.use和install之间的关系

    创建一个plugins.js文件 跟main.js同级下,创建一个plugins.js文件 export default { // install是vue给我们提供的.它会自动去执行install. ...

  8. 防止xxs攻击,input表单中不能输入script标签

    在web网页中,所有的项目中.input表单中不能让用户输入script这些敏感性的. 一旦出现提示用户非正常输入.然后立刻将值清空 <el-input style="width:35 ...

  9. Win32汇编:各种语句的构造方式

    整理复习汇编语言的知识点,以前在学习<Intel汇编语言程序设计 - 第五版>时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会 ...

  10. 通过URL载入ShellCode代码

    将生成的shellcode放到web服务器上,本地不保存恶意代码,本地只负责加载到内存运行,这样可以很好的躲过查杀. 生成shellcode msfvenom -a x86 --platform Wi ...