线程组和线程的优先级
作者:互联网
1、什么是线程组
Java中用ThreadGroup来表示线程组。它的作用总体来说就是对线程进行统一的管理(优先级管理和权限管理)。
每个线程组下可以包含很多个线程或者线程组,它是一种树状结构。每个线程都不能独立存在,没有特意设置线程组的线程,main线程就是他们的线程组;
可以看一下例子,还是以Executor线程池来管理线程为例:
@Bean
public Executor executor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(20);
executor.setMaxPoolSize(Integer.MAX_VALUE);
executor.setQueueCapacity(20);
executor.setThreadGroupName("glj-thread-group"); //通过该属性设置线程组的名字
executor.initialize();
return executor;
}
获取当前线程的线程组的名字,可以使用Thread.currentThread.getThreadGroup.getName()
2、线程的优先级
Java中推荐使用的优先级为1-10,但这个推荐并不是可靠的,我们自己设置的优先级只是给os一个建议,真正的调用顺序都是由os的线程调度算法决定的。只是优先级高的要比优先级低的先执行的概率大一些而已。
未设置优先级的线程,默认的优先级是5。我们可以使用tread.setPriority(6)来设置优先级。
public static class T1 extends Thread {
@Override
public void run() {
super.run();
System.out.println(String.format("当前执行的线程是: %s, 优先级: %d",
Thread.currentThread().getName(),
Thread.currentThread().getPriority()));
}
}
public static void main(String[] args) {
IntStream.range(1, 10).forEach(i -> {
Thread thread = new Thread(new T1());
thread.setPriority(i);
thread.start();
});
}
/**
* 以下为输出结果
*/
当前执行的线程是: Thread-7, 优先级: 4
当前执行的线程是: Thread-11, 优先级: 6
当前执行的线程是: Thread-5, 优先级: 3
当前执行的线程是: Thread-17, 优先级: 9
当前执行的线程是: Thread-1, 优先级: 1
当前执行的线程是: Thread-15, 优先级: 8
当前执行的线程是: Thread-3, 优先级: 2
当前执行的线程是: Thread-9, 优先级: 5
当前执行的线程是: Thread-13, 优先级: 7
java提供了一个线程调度器来监视和控制处于RUNNABLE状态的线程。调度策略采用的是抢占式,优先级高的线程会比优先级低的线程有更大的机率先执行。如果两个线程优先级相同,那么采用“先到先得”的原则。
还有一种线程叫”守护线程“,守护线程默认的优先级比较低。当所有非守护线程都结束之后,守护线程也会自动结束。可以通过thread的setDaemon(true)来设置是否为守护线程
注意:如果线程的优先级高于所在的线程组的优先级,那么实际上的线程的优先级 = 线程组的优先级
标签:组和,优先级,Thread,线程,当前,executor,执行 来源: https://blog.csdn.net/u012379844/article/details/110469914