线程的基本操作(一)
线程的状态
线程的所有状态在thread中的state枚举中定义
public enum state{
new, //刚刚新建的线程,还没有开始执行
runnable, //执行时的状态
blocked, //在执行过程中遇到synchronized同步块,进入blocked阻塞状态,暂停执行,直到获得请求的锁
waiting, //无时间限制的等待,通过wating()方法等待的线程在等待notify()方法,而通过join()方法等待的线程则会等待目标线程终止
timed_waiting, //有时限的等待
terminated; //线程执行完毕,进入terminated在状态,表示结束
}
新建线程
新建线程有两种方式
1.继承thread类
class threaddemo extends thread{
//重写run()方法
public void run(){};
}
thread t1 = new threaddemo();
t1.start();//启动线程
2.实现runnable接口
class threaddemo implements runnable{
//重写run()方法
public void run(){};
}
thread t1 = new thread(new threaddemo());//通过thread的构造函数 新建线程
t1.start();//启动线程
run()和start()的区别:run()方法中需要写的是线程将要执行的逻辑,就是我要做什么;start()方法表示启动线程,就是我要开始了。
终止线程
stop()方法(已被废弃),该方法的执行会终止线程并释放锁,而锁是用来维持对象一致性的,如果写线程刚写一半的时候执行了stop(),释放了锁,读线程读到的数据就有问题了
线程中断
不同于stop()方法,thread.interrupt()方法不会立即终止线程,而是设置一个中断标志 告诉线程‘有人希望你退出了’,中断相关方法有
public void thread.interrupt(); //实例方法,中断线程
public boolean thread.isinterrupted(); //实例方法,判断是否被中断
public static boolean thread.interrupted() //静态方法,判断是否被中断,并清除当前中断状态
thread.sleep()方法会让当前线程休眠,它会抛出一个interruptedexception中断异常,非运行时异常,必须捕获;
thread.sleep()方法由于中断而抛出异常时,会清除中断标记