赞
踩
线程之间的通信,可通过对对象的成员变量的状态修改,达到控制线程的目的。
Java中,线程要基于对象才能创建。如:
ThreadTest t1 = new ThreadTest();
t1.start();//启动一个线程,并运行ThreadTest 中的run()方法
如何对另外一个线程的状态控制,通过传入另外那个对象的实例,然后调用另外这个对象的私有函数,该私有函数内改变成员变量的状态。
为什么是私有函数,是为了达到更好的封装的目的。
程序如下:
package Multithread;
}
}
程序运行结果:
i'm going.
He has gone.
以上其实总共有三个线程,一个主线程,两个子线程。对于希望简化只需要通过主线程控制子线程中断的话,可以通过如下代码实现。
class Example2 extends Thread {
volatile boolean stop = false;// 线程中断信号量
public static void main(String args[]) throws Exception {
Example2 thread = new Example2();
System.out.println("Starting thread...");
thread.start();
Thread.sleep(3000);
System.out.println("Asking thread to stop...");
// 设置中断信号量
thread.stop = true;
Thread.sleep(3000);
System.out.println("Stopping application...");
}
public void run() {
// 每隔一秒检测一下中断信号量
while (!stop) {
System.out.println("Thread is running...");
long time = System.currentTimeMillis();
/*
* 使用while循环模拟 sleep 方法,这里不要使用sleep,否则在阻塞时会 抛
* InterruptedException异常而退出循环,这样while检测stop条件就不会执行,
* 失去了意义。
*/
while ((System.currentTimeMillis() - time < 1000)) {}
}
System.out.println("Thread exiting under request...");
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。