java的线程操作还给了我们很多方便的函数来对当前运行的线程进行处理,比如:
Thread.isAlive()//判断当前线程是否存活
Thread.getName()//获取进程的名字
Thread.sleep()//让当前线程睡眠多少时间
Thread.interrupt() //设置线程的状态为中断
Thread.interrupted() //判断线程是否是中断状态,并且将状态设置为非中断状态
Thread.Isinterrupted() // 判断是否是中断状态,但是不设置为非中断状态
当我们相应中断一个线程,停止运行线程下面的代码的时候,应该怎么办呢,从上面的api来看我们只能将线程的状态设置为中断状态,并不能真正的停止线程的运行,所以我们需要在线程中判断线程的状态是否被设置为中断状态,如果是的话,就需要抛出异常来停止执行下面的代码了,如
public class ReaderThread implements Runnable{
public void run(){
for(int i = 0;i<1000;i++){
if(this.interrupted()){
throw new InterruptedExection();
}
System.out.println("i="+i);
}
System.out.println("我在for下面");
}
}
ReaderThread reader = new ReaderThread();
Thread t1 = new Thread(reader);
t1.start();
t1.interrupt();
还有一种已经废弃的方式也可以停止一个线程就是stop方法,现在已经不建议使用,因为太过暴力,会不能很好的处理一些数据的清理工作
Thread.suspend()// 用来暂停线程
但是这个会导致公共资源的占用
Thread.resume()// 开启线程
Thread.yield()// 放弃当前占用的cpu资源,让给其他的线程使用
线程的优先级
优先级具有继承性,比如在线程A中启动线程B,线程B和线程A的优先级是一样的,优先级的常量为1-10
Thread.getPriority();// 获取当前线程的优先级
Thread.setPriority();// 设置线程的优先级