中断线程
Thread类提供了一种线程可以中断其他线程的机制。当一个线程被中断时,它会抛出java.lang.InterruptedException。
void interrupt():
中断调用此方法的Thread对象所关联的线程。
---------> 当一条线程由于调用了Thread的sleep()或者join()方法而被阻塞时,该线程的中断状态就会被清除,同时抛出InterruptedException异常。
static boolean interrupted()
验证当前线程是否已经中断,在这个例子会返回true。该线程的中断状态会被这个方法清除掉。
boolean isInterrupted();
验证线程是否已经中断,该线程的中断状态不会受此方法的影响。
package demo;
public class ThreadDemo {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
String name = Thread.currentThread().getName();
int count = 0;
while (!Thread.interrupted()) {
System.out.println("name:-->" + name + " count:-->"
+ count++);
}
}
};
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
while (true) {
double n = Math.random();
if (n >= 0.4999999 && n < 0.50000001) {
break;
}
}
t1.interrupt();
t2.interrupt();
}
}
等待线程
线程(如默认的主线程)会偶尔启动另一个线程去操作单调的计算,下载大文件或者操作一些其他的耗时任务。在结束它自己的任务后,这个启动工作线程的线程就准备着处理工作线程的结果,同时等待该线程“寿终正寝”。
Thread类 提供了3中join()方法,允许调用线程等待执行此方法的线程对象所关联的线程执行完毕。
void join()
无限期地等待直到该线程死亡。当任意线程中断当前线程,InterruptedException就会抛出。
void join(long millis)
该线程死亡之前最多等待millis毫秒。如果传递0作为参数就会无限期地等待。
void join(long millis, int nanos)
线程睡眠
Thread类声明了一对静态方法致使线程睡眠。(暂时性 的停止执行)
void sleep(long millis)
线程沉睡多少毫秒
package demo;
public class ThreadDemo {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
String name = Thread.currentThread().getName();
int count = 0;
while (!Thread.interrupted()) {
System.out.println("name:-->" + name + " count:-->"
+ count++);
}
}
};
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t1.interrupt();
t2.interrupt();
}
}