第三百二十节 Java线程教程 - Java线程中断、Java Volatile变量
Java线程教程 - Java线程组
线程总是线程组的成员。
默认情况下,线程的线程组是其创建者线程的组。
Java程序中的线程组由java.lang.ThreadGroup类的一个对象表示。
Thread类中的getThreadGroup()方法返回一个线程的ThreadGroup的引用。
例子
以下代码演示了,默认情况下,新线程是其创建者线程的线程组的成员。
public class Main {public static void main(String[] args) {Thread t1 = Thread.currentThread();ThreadGroup tg1 = t1.getThreadGroup();System.out.println("Current thread"s name: " + t1.getName());System.out.println("Current thread"s group name: " + tg1.getName());Thread t2 = new Thread("my new thread");ThreadGroup tg2 = t2.getThreadGroup();System.out.println("New thread"s name: " + t2.getName());System.out.println("New thread"s group name: " + tg2.getName());} }
上面的代码生成以下结果。
注意
您还可以创建线程组,并在该线程组中放置一个新线程。
要在你的线程组中放置一个新线程,我们必须使用Thread类的一个构造函数来接受一个ThreadGroup对象作为参数。
以下代码将新线程放置在特定线程组中:
ThreadGroup myGroup = new ThreadGroup("My Thread Group"); Thread t = new Thread(myGroup, "myThreadName");
线程组以树状结构布置。线程组可以包含另一个线程组。
ThreadGroup类中的getParent()方法返回线程组的父线程组。
顶层线程组的父级为null。
ThreadGroup的activeCount()方法返回组中活动线程数的估计值。
ThreadGroup类的enumerate()方法返回线程组中的线程。
Java线程教程 - Java Volatile变量
关键字volatile可以保持线程的工作内存中的变量值与它们在主存储器中的值同步。
我们可以声明一个变量volatile如下:
volatile boolean flag = true;
我们可以只声明一个类成员变量,实例或静态字段,作为volatile。
我们可以使用volatile变量作为标志来停止线程。
例子
下面的代码演示了volatile变量的使用。
public class Main extends Thread {private volatile boolean keepRunning = true;public void run() {System.out.println("Thread started");while (keepRunning) {try {System.out.println("Going to sleep");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("Thread stopped");}public void stopThread() {this.keepRunning = false;}public static void main(String[] args) throws Exception{Main v = new Main();v.start();Thread.sleep(3000);System.out.println("Going to set the stop flag to true");v.stopThread();} }
上面的代码生成以下结果。