查看和修改線程名稱
--如果朋友您想轉載本文章請注明轉載地址"http://www.cnblogs.com/XHJT/p/3893797.html "謝謝--
java是一種允許並發控制的語言,在我們編寫的程序的時候,總是伴隨着多個線程的執行,
但是背后運行的是什么線程,我們是看不到的,那么又該如何才能知道有哪些線程在運行呢?
(請查看上一篇文章《獲取JVM所有線程》"http://www.cnblogs.com/XHJT/p/3890280.html "這里就不多說了-_-)
另外正所謂"人如其名",很多時候我們查看到系統在運行的線程的名字可讀性並不是很好,
所以我們可以根據此線程的功能來為線程換一個名稱
在這里主要用到的方法有:
getName():獲取當前線程的名稱
setName();設置當前線程的名稱
getID():返回當前線程的標識符
getThreadGroup:獲得當前線程所在的線程組
注:新建的線程的ID是由系統自動分配的,不可指定,但是其名稱可通過setName()設置;
代碼實例:
package com.xhj.thread;
import java.util.Scanner;
/**
* 查看和修改線程名稱
*
* @author XIEHEJUN
*
*/
public class ModifyThreadName implements Runnable {
@Override
public void run() {
}
/**
* 獲取並打印出當前所有的線程
*
* @return
*/
public static Thread[] getThreads() {
ThreadGroup group = Thread.currentThread().getThreadGroup();
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads, false);
System.out.println("當前運行的線程有:");
System.out.println("線程ID" + "\t線程名稱");
for (Thread thread : threads) {
System.out.println(thread.getId() + "\t" + thread.getName());
}
return threads;
}
/**
* 程序數據輸入口
*
* @return
*/
public static String input() {
Scanner sc = new Scanner(System.in);
String str = sc.next();
return str;
}
/**
* 查看,修改,新建線程 在新建線程時,線程的ID是由系統自動分配的
*
* @param id
* @param threads
*/
public static void modifyName(int id, Thread[] threads) {
try {
int count = -1;
for (Thread thread : threads) {
if (thread.getId() == (long) id) {
System.out.println("請輸入您修改好了的名稱:");
thread.setName(input());
break;
} else {
count++;
}
}
if (count == threads.length - 1) {
System.out.println("沒有這個線程,將為您新建一個線程,請輸入線程的名稱:");
Thread new_thread = new Thread(input());
new_thread.start();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
try {
Thread[] threads = getThreads();
System.out.println("請輸入您要修改的線程的ID:");
int n = Integer.parseInt(input());
modifyName(n, threads);
getThreads();
} catch (Exception e) {
System.out.println("2" + e.getMessage());
}
}
}