多线程篇6 线程组

来源:互联网 发布:旋转轮胎怎么修改数据 编辑:程序博客网 时间:2024/06/05 04:44

所有Java线程都属于某个线程组(thread group)。线程组提供了一个将多个线程组织成一个线程组对象来管理的机制,如可以通过一个方法调用来启动线程组中的所有线程。

1.创建线程组

线程组是由java.lang包中的ThreadGroup类实现的。它的构造方法如下:

•public ThreadGroup(String name)•public ThreadGroup(ThreadGroup parent, String name)
name为线程组名,parent为线程组的父线程组,若无该参数则新建线程组的父线程组为当前运行的线程的线程组。当一个线程被创建时,运行时系统都将其放入一个线程组。创建线程时可以明确指定新建线程属于哪个线程组,若没有明确指定则放入缺省线程组中。一旦线程被指定属于哪个线程组,便不能改变,不能删除。

2.缺省线程组

如果在创建线程时没有在构造方法中指定所属线程组,运行时系统会自动将该线程放入创建该线程的线程所属的线程组中。那么当我们创建线程时没有指定线程组,它属于哪个线程组呢?

当Java应用程序启动时,Java运行时系统创建一个名main的ThreadGroup对象。除非另外指定,否则所有新建线程都属于main线程组的成员。


在一个线程组内可以创建多个线程,也可以创建其它的线程组。一个程序中的线程组和线程构成一个树型结构,如图6所示.

如果在Applet中创建线程,新线程组可能不是main线程组,它依赖于使用的浏览器或Applet查看器。

创建属于某个线程组的线程可以通过下面构造方法实现.
•public Thread(ThreadGroup group, Runnable target)•public Thread(ThreadGroup group, String name)•public Thread(ThreadGroup group, Runnable target, String name)

如下面代码创建的myThread线程属于myThreadGroup线程组。

ThreadGroup myGroup = new ThreadGroup("My Group of Threads");Thread myThread = new Thread(myGroup, "a thread for my group");

为了得到线程所属的线程组可以调用Thread的getThreadGroup()方法,该方法返回ThreadGroup对象。可以通过下面方法获得线程所属线程组名。

myThread.getThreadGroup().getName()

一旦得到了线程组对象,就可查询线程组的有关信息,如线程组中其他线程、也可仅通过调用一个方法就可实现修改线程组中的线程,如挂起、恢复或停止线程。

3.线程组的操作方法

线程组类提供了有关方法可以对线程组操作。

•public final String getName() 返回线程组名。•public final ThreadGroup getParent() 返回线程组的父线程组对象。•public final void setMaxPriority(int pri) 设置线程组的最大优先级。线程组中的线程不能超过该优先级。•public final int getMaxPriority() 返回线程组的最大优先级。•public boolean isDestroyed() 测试该线程组对象是否已被销毁。•public int activeCount() 返回该线程组中活动线程的估计数。•public int activeGroupCount() 返回该线程组中活动线程组的估计数。•public final void destroy() 销毁该线程组及其子线程组对象。当前线程组的所有线程必须已经停止。


Java语言内在支持多线程的程序设计。线程是进程中的一个单个的顺序控制流,多线程是指单个程序内可以同时运行多个线程。

在Java程序中创建多线程的程序有两种方法。一种是继承Thread类并覆盖其run()方法,另一种是实现Runnable接口并实现其run()方法。

线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。Java的每个线程都有一个优先级,当有多个线程处于就绪状态时,线程调度程序根据线程的优先级调度线程运行。

线程都是独立的、异步执行的线程,但在很多情况下,多个线程需要共享数据资源,这就涉及到线程的同步与资源共享的问题。

所有Java线程都属于某个线程组。线程组提供了一个将多个线程组织成一个线程组对象来管理的机制,如可以通过一个方法调用来启动线程组中的所有线程。


0 0
原创粉丝点击