import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
public class GetThreads {
public static void main(String[] args) {
// 获取java线程的管理MXBean
ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
// 不需要获取同步的Monitor和synchronizer信息,仅获取线程和线程堆栈信息
ThreadInfo[] threadInfos = tmxb.dumpAllThreads(false, false);
// 遍历线程信息,打印出ID和名称
for (ThreadInfo info : threadInfos) {
System.out.println("[" + info.getThreadId() + "] " + info.getThreadName());
}
}
}
遍历打印出来的信息,(可能每个电脑打印出来有些差别)
[5] Attach Listener
[4] Signal Dispatcher
[3] Finalizer
[2] Reference Handler
[1] main
线程优先级
线程优先级是通过一个int 变量priority来控制的,优先级范围为1到10,可以通过setPriority(int)来设置,优先级默认为5。
以下是一个示例代码,
package thread;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ThreadPriority {
private static volatile boolean notStart = true;
private static volatile boolean notEnd = true;
public static void main(String[] args) throws Exception {
List<Job> jobs = new ArrayList<Job>();
// 先给不同线程分别给一个不同的优先级并执行线程
for (int i = 0; i < 10; i++) {
int priority = i < 5 ? Thread.MIN_PRIORITY : Thread.MAX_PRIORITY;
Job job = new Job(priority);
jobs.add(job);
Thread thread = new Thread(job, "Thread:" + i);
thread.setPriority(priority);// 设置优先级
thread.start();
}
notStart = false;
TimeUnit.SECONDS.sleep(10);
notEnd = false;
for (Job job : jobs) {
System.out.println("Job priority:" + job.priority + " ,jobCount:" + job.jobCount);
}
}
。。。。。。。。。。。。。。。。。
版权原因,完整文章,请参考如下:线程优先级