Java线程组

Java提供了一种在单个对象中组合多个线程的便捷方法。通过这种方式,通过单个方法调用暂停,恢复或中断线程组。

注意: 现在不推荐使用suspend()resume()stop()方法。

Java线程组由java.lang.ThreadGroup类实现。

ThreadGroup表示一组线程。 线程组还可以包括其他线程组。 线程组创建一个树,其中除初始线程组之外的每个线程组都具有父线程。

允许线程访问有关其自己的线程组的信息,但它无法访问有关其线程组的父线程组或任何其他线程组的信息。

ThreadGroup类的构造函数

ThreadGroup类只有两个构造函数。

编号构造函数描述
1ThreadGroup(String name)创建具有给定名称的线程组。
2ThreadGroup(ThreadGroup parent, String name)创建具有给定父组和名称的线程组。

ThreadGroup类的方法

ThreadGroup类中有许多方法,下面给出了ThreadGroup方法的列表。

编号方法描述
1void checkAccess()此方法确定当前运行的线程是否具有修改线程组的权限。
2int activeCount()此方法返回线程组及其子组中活动线程数的估计值。
3int activeGroupCount()此方法返回线程组及其子组中活动组数量的估计值。
4void destroy()此方法会销毁线程组及其所有子组。
5int enumerate(Thread[] list)此方法将线程组及其子组中的每个活动线程复制到指定的数组中。
6int getMaxPriority()此方法返回线程组的最大优先级。
7String getName()此方法返回线程组的名称。
8ThreadGroup getParent()此方法返回线程组的父级。
9void interrupt()此方法中断线程组中的所有线程。
10boolean isDaemon()此方法测试线程组是否为守护程序线程组。
11void setDaemon(boolean daemon)此方法更改线程组的守护程序状态。
12boolean isDestroyed()此方法测试此线程组是否已被销毁。
13void list()此方法将有关线程组的信息打印到标准输出。
14boolean parentOf(ThreadGroup g)此方法测试线程组是线程组参数还是其祖先线程组之一。
15void suspend()此方法用于挂起线程组中的所有线程。
16void resume()此方法用于恢复使用suspend()方法挂起的线程组中的所有线程。
17void setMaxPriority(int pri)此方法设置组的最大优先级。
18void stop()此方法用于停止线程组中的所有线程。
19String toString()此方法返回线程组的字符串表示形式。

下面来一个分组多个线程的代码。

ThreadGroup tg1 = new ThreadGroup("Group A");
Thread t1 = new Thread(tg1,new MyRunnable(),"one");
Thread t2 = new Thread(tg1,new MyRunnable(),"two");
Thread t3 = new Thread(tg1,new MyRunnable(),"three");

Java

现在所有3个线程都属于一个组。 这里,tg1是线程组名称,MyRunnable是实现Runnable接口的类,“one”,“two”和“three”是线程名称。

现在只能通过一行代码中断所有线程。

Thread.currentThread().getThreadGroup().interrupt();

Java

ThreadGroup示例

示例: ThreadGroupDemo.java

package com.yiibai;

public class ThreadGroupDemo implements Runnable {
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        ThreadGroupDemo runnable = new ThreadGroupDemo();
        ThreadGroup tg1 = new ThreadGroup("Parent ThreadGroup");

        Thread t1 = new Thread(tg1, runnable, "one");
        t1.start();
        Thread t2 = new Thread(tg1, runnable, "two");
        t2.start();
        Thread t3 = new Thread(tg1, runnable, "three");
        t3.start();

        System.out.println("Thread Group Name: " + tg1.getName());
        tg1.list();

    }
}

Java

执行上面示例代码,得到以下结果:

Thread Group Name: Parent ThreadGroup
three
two
one
java.lang.ThreadGroup[name=Parent ThreadGroup,maxpri=10]
    Thread[one,5,Parent ThreadGroup]
    Thread[two,5,Parent ThreadGroup]
    Thread[three,5,Parent ThreadGroup]

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java线程池是一种用于管理和复用线程的机制。它可以在需要执行任务时,从线程池中获取可用的线程来执行任务,而不是每次都创建新的线程。这样可以减少线程创建和销毁的开销,提高系统的性能和资源利用率。 Java线程池通常由一个线程池管理器、工作队列和一工作线程成。线程池管理器负责创建、初始化和释放线程池,工作队列用于存储待执行的任务,工作线程则负责从队列中取出任务并执行。 使用线程池可以带来以下好处: 1. 提高系统性能:通过复用线程,降低了线程创建和销毁的开销,提高了系统的响应速度。 2. 控制资源消耗:通过限制线程的数量,可以控制系统同时运行的线程数量,避免资源过度消耗。 3. 提高系统稳定性:通过合理配置线程池参数,可以避免因为系统资源耗尽而导致系统崩溃。 在Java中,可以使用java.util.concurrent包中的Executor框架来创建和管理线程池。常用的线程池类型有FixedThreadPool、CachedThreadPool、SingleThreadExecutor等,每种类型适用于不同的场景和需求。 要使用线程池,通常需要以下步骤: 1. 创建线程池对象,并指定线程池的类型和参数。 2. 创建任务(Runnable或Callable对象)并提交给线程池。 3. 线程池会根据任务的类型和当前线程池状态,决定是创建新线程、复用现有线程,还是将任务加入到工作队列中。 4. 线程池中的工作线程会不断从队列中获取任务,并执行任务的run方法。 5. 当不再需要执行任务时,需要关闭线程池,释放资源。 通过合理使用线程池,可以有效管理线程,提高系统的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值