小程序开发平台好牌子推荐抖音seo关键词优化怎么做
2026/2/27 14:43:09 网站建设 项目流程
小程序开发平台好牌子推荐,抖音seo关键词优化怎么做,微网站建设方案书,青岛网站建设软件今天我们来简单的介绍一下线程组和线程的关系#xff0c;以及线程优先级的相关内容。线程组(ThreadGroup)Java 用 ThreadGroup 来表示线程组#xff0c;我们可以通过线程组对线程进行批量控制。每个 Thread 必然存在于一个 ThreadGroup 中#xff0c;Thread 不能独立于 Thre…今天我们来简单的介绍一下线程组和线程的关系以及线程优先级的相关内容。线程组(ThreadGroup)Java 用 ThreadGroup 来表示线程组我们可以通过线程组对线程进行批量控制。每个 Thread 必然存在于一个 ThreadGroup 中Thread 不能独立于 ThreadGroup 存在。执行main()方法的线程名字是 main如果在 new Thread 时没有显式指定那么默认将父线程当前执行 new Thread 的线程线程组设置为自己的线程组。示例代码Thread testThread new Thread(() - { System.out.println(testThread当前线程组名字 Thread.currentThread().getThreadGroup().getName()); System.out.println(testThread线程名字 Thread.currentThread().getName()); }); testThread.start(); System.out.println(执行main所在线程的线程组名字 Thread.currentThread().getThreadGroup().getName()); System.out.println(执行main方法线程名字 Thread.currentThread().getName());以下是程序的运行结果ThreadGroup 是一个标准的向下引用的树状结构这样设计可以防止上级线程被下级线程引用而无法有效地被 GC 回收。线程组的常用方法及数据结构获取当前线程的线程组名字Thread.currentThread().getThreadGroup().getName()复制线程组// 获取当前的线程组 ThreadGroup threadGroup Thread.currentThread().getThreadGroup(); // 复制一个线程组到一个线程数组获取Thread信息 Thread[] threads new Thread[threadGroup.activeCount()]; threadGroup.enumerate(threads);线程组统一异常处理// 创建一个线程组并重新定义异常 ThreadGroup group new ThreadGroup(testGroup) { Override public void uncaughtException(Thread t, Throwable e) { System.out.println(t.getName() : e.getMessage()); } }; // 测试异常 Thread thread new Thread(group, () - { // 抛出 unchecked 异常 throw new RuntimeException(测试异常); }); // 启动线程 thread.start();线程的优先级线程优先级可以指定范围是 1~10。但并不是所有的操作系统都支持 10 级优先级的划分比如有些操作系统只支持 3 级划分低、中、高Java 只是给操作系统一个优先级的参考值线程最终在操作系统中的优先级还是由操作系统决定。Java 默认的线程优先级为 5线程的执行顺序由调度程序来决定线程的优先级会在线程被调用之前设定。通常情况下高优先级的线程将会比低优先级的线程有更高的概率得到执行。Thread类的setPriority()方法可以用来设定线程的优先级。Thread t1 new Thread(); System.out.println(线程默认优先级 t1.getPriority()); Thread t2 new Thread(); t2.setPriority(10); System.out.println(线程设置优先级等级为10后线程的优先级 t2.getPriority());输出结果既然有 10 个级别来设定线程的优先级那是不是可以在业务实现的时候采用这种方法来指定线程执行的先后顺序呢对于这个问题答案是No!Java 中的优先级不是特别的可靠Java 程序中对线程所设置的优先级只是给操作系统一个建议操作系统不一定会采纳。而真正的调用顺序是由操作系统的线程调度算法来决定的。我们通过代码来验证一下public class MyThread extends Thread { Override public void run() { // 输出当前线程的名字和优先级 System.out.println(MyThread当前线程 Thread.currentThread().getName() ,优先级 Thread.currentThread().getPriority()); } public static void main(String[] args) { for (int i 1; i 10; i) { MyThread thread new MyThread(); thread.setName(线程 i); thread.setPriority(i); thread.start(); } } }运行该程序有时候可以按照优先级执行有时却不行Java 提供了一个线程调度器来监视和控制处于RUNNABLE 状态的线程。线程的调度策略采用抢占式的方式优先级高的线程会比优先级低的线程有更大的几率优先执行。在优先级相同的情况下会按照“先到先得”的原则执行。每个 Java 程序都有一个默认的主线程就是通过 JVM 启动的第一个线程——main 线程。还有一种特殊的线程叫做守护线程Daemon守护线程默认的优先级比较低。如果某线程是守护线程那如果所有的非守护线程都结束了这个守护线程也会自动结束。当所有的非守护线程结束时守护线程会自动关闭这就免去了还要继续关闭子线程的麻烦。线程默认是非守护线程可以通过 Thread 类的 setDaemon 方法来设置为守护线程。线程组和线程优先级之间的关系之前我们谈到一个线程必然存在于一个线程组中那么当线程和线程组的优先级不一致的时候会怎样呢我们来验证一下// 创建一个线程组 ThreadGroup threadGroup new ThreadGroup(testGroup); threadGroup.setMaxPriority(8); System.out.println(线程组的优先级 threadGroup.getMaxPriority()); // 创建一个线程属于上述线程组 Thread thread new Thread(threadGroup,testThread); thread.setPriority(10); System.out.println(线程的优先级 thread.getPriority());运行程序后的输出结果所以如果某个线程的优先级大于线程所在线程组的最大优先级那么该线程的优先级将会失效取而代之的是线程组的最大优先级。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询