多线程篇6 线程组

所有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 线程组_第1张图片

在一个线程组内可以创建多个线程,也可以创建其它的线程组。一个程序中的线程组和线程构成一个树型结构,如图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线程都属于某个线程组。线程组提供了一个将多个线程组织成一个线程组对象来管理的机制,如可以通过一个方法调用来启动线程组中的所有线程。


你可能感兴趣的:(多线程,线程,异步,设计,结构)