Java并发编程实例--2.获取和设置线程信息
常用线程属性
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.获取和设置线程信息的更多相关文章
- Java并发学习之二——获取和设置线程信息
本文是学习网络上的文章时的总结,感谢大家无私的分享. Thread类的对象中保存了一些属性信息可以帮助我们辨别每个线程.知道它的一些信息 ID:每一个线程的独特标示: Name:线程的名称: Prio ...
- Java并发编程(二)如何保证线程同时/交替执行
第一篇文章中,我用如何保证线程顺序执行的例子作为Java并发系列的开胃菜.本篇我们依然不会有源码分析,而是用另外两个多线程的例子来引出Java.util.concurrent中的几个并发工具的用法. ...
- java并发编程JUC第九篇:CountDownLatch线程同步
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...
- Java并发编程实例(synchronized)
此处用一个小程序来说明一下,逻辑是一个计数器(int i):主要的逻辑功能是,如果同步监视了资源i,则不输出i的值,但如果没有添加关键字synchronized,因为是两个线程并发执行,所以会输出i的 ...
- Java并发编程原理与实战七:线程带来的风险
在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源.但使用多线程同时会带来相应的风险,本文将展开讨论. 一.引言 多线程将会带来几个问题: 1.安全性问题 线程安全性可能 ...
- Java并发编程原理与实战四:线程如何中断
如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程. java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下面我们 ...
- [Java并发编程之美]第1章 线程基础
第1章 线程 1.1 线程与进程 进程是操作系统资源分配和调度的基本单位,但cpu资源是分配到线程的,也就是线程是CPU分配的基本单位. 线程自己的栈资源中,存放的局部变量是线程私有的,其他线程无法访 ...
- java 22 - 5 多线程之获取和设置线程对象的名称
如何获取线程对象的名称呢? public final String getName():获取线程的名称.如何设置线程对象的名称呢? public final void setName(String n ...
- 那些年读过的书《Java并发编程实战》一、构建线程安全类和并发应用程序的基础
1.线程安全的本质和线程安全的定义 (1)线程安全的本质 并发环境中,当多个线程同时操作对象状态时,如果没有统一的状态访问同步或者协同机制,不同的线程调度方式和不同的线程执行次序就会产生不同的不正确的 ...
- Java 并发编程中的 Executor 框架与线程池
Java 5 开始引入 Conccurent 软件包,提供完备的并发能力,对线程池有了更好的支持.其中,Executor 框架是最值得称道的. Executor框架是指java 5中引入的一系列并发库 ...
随机推荐
- 阿里云ECS自建K8S_IPV6重启后异常问题解决过程
阿里云ECS自建K8S_IPV6重启后异常问题解决过程 背景 最近安装了一个单节点的K8S_IPV6 昨天不知道何故 突然宕机了. 然后只能在阿里云的控制台后台重启了ECS 启动之后看K8S的状态一开 ...
- [转帖]tcp、http和socket的区别
https://www.jianshu.com/p/88d69454bdde 一:tcp协议 tcp协议属于传输层协议(UDP也属于传输层协议,但是UDP协议是无状态的).建立一个TCP连接需要三次握 ...
- [转帖]MySQL数据类型(decimal的存储大小)
本来还以为MySQL的数据类型挺简单的,没想到竟然有很多坑,容我仔细道来 MySQL数据类型 整数类型(注意是字节) 浮点型(重点关注decimal) 字符型(注意这是4.x版本的定义,5.x以后已经 ...
- [转帖]《Linux性能优化实战》笔记(四)—— CPU 使用率
一. 节拍率与CPU时间 前一篇说到,Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉. 为了维护 CPU ...
- 【转帖】eBay 云计算“网”事|网络重传篇
https://www.infoq.cn/article/iy1drmf6wk8up14dchq8/ #导读 在之前的eBay云计算"网"事|网络超时篇和eBay云计算" ...
- [转帖]Python基础之数据类型(一)
https://www.jianshu.com/p/5c43f6056f77 Python基本数据类型 python系列文档都是基于python3 数字 字符串 列表 元组 字典 集合 一.数字 特性 ...
- [转帖]使用JAYDEBEAPI同时连接两个不同数据库(ORACLE+MYSQL)的问题
jaydebeapi 同时连接两种数据库 在使用jaydebeapi只连接一种数据库时,是没问题的,但是如果需要同时连接两种数据库,比如同时连接oracle和mysql 例如以下测试代码: imp ...
- 【转帖】What are segfault rip/rsp numbers and how to use them
https://stackoverflow.com/questions/1456899/what-are-segfault-rip-rsp-numbers-and-how-to-use-them ...
- [转帖]一文入门前景广阔的 eBPF
https://zhuanlan.zhihu.com/p/567375673 [摘要]eBPF带来的最大的好处即是可以对内核进行编程性处理,实现对内核中不灵活的部分,实现自定义的处理.这种灵活性使得对 ...
- 【NSSCTF-Round#16】 Web和Crypto详细完整WP
每天都要加油哦! ------2024-01-18 11:16:55 [NSSRound#16 Basic]RCE但是没有完全RCE <?php error_reporting(0); ...