为什么要使用多线程?
1.同时执行多个任务
2.执行某一复杂任务时需要进行其他操作
在单独线程中执行一个任务的简单方法:
1.构建一个实现了Runnable接口的类:
class MyRunnable implements Runnable{
public void run(){
//在这里写任务代码
}
}
2.创建一个该类的实例:
Runnable r =new MyRunnable();
3.由Runnable创建一个Thread对象:
Thread t = new Thread(r);
4.启动线程:
t.start();
不需要实现Runnable接口的实现方法:
class MyThread extends Thread{
public void run(){
//任务代码
}
}
注意:
调用Thread或Runnable对象的run方法时只会执行同一个线程中的任务而不会启动新线程。
线程的中断:
stop和suspend已经被弃用。
线程的中断状态:每个线程具有一个这样的boolean标志,用来表示该线程是否被中断,每个线程应该不时的检查该状态以判断线程是否被中断。
使用interrupt方法请求终止线程,该方法会将中断状态置位
判断当前线程的中断线程是否被置位:
while(!Thread.currentThread().isInterrupted()){
//Thread.currentThread()用以获得当前线程
}
当线程被阻塞时,无法检测中断状态,会产生InterruptedException异常
如果在中断状态被置位时调用sleep方法,它不会休眠。相反,它将清楚这一状态并抛出InterruptedException
注意:
不要忽视该异常,可以通过捕捉到异常后中断该线程或者干脆变成抛出该异常(throws)而不是使用catch
参考:《java核心技术Ⅰ》