一.线程的创建:
1.继承Thread重写run
2.实现Runable,重写run
3.继承Thread,匿名内部类
4.实现Runnable,匿名内部类
5.lambda
1.继承Thread重写run
2.实现Runable,重写run
3.继承Thread,匿名内部类
4.实现Runnable,匿名内部类
5.lambda
二.线程中断
本质上来说方法就一种,让该线程的入口方法执行完毕。
1.给线程设定一个结束标志位。
由于线程t和main函数里的其他部分是并发执行的,可以在main函数里设立结束标志位。
Thread也有一个自带的结束标志位currentThread是获取当前线程实例t,isInterrupted是t对象里自带的一个标志位,相当于。上一个的isQuit;main函数中的interrup的作用相当于上面的isQuit=true。
这里会报错是因为sleep被唤醒时会自动将isInterrupted清空(相当于isQuit=false)。
若要结束循环就在while里的catch中加个break
sleep清空标志位是为了让线程对于何时结束有一个更明确地认识,interrupt方法只是通知线程该结束啦,不是强制结束,类似于家长周末叫我起床,叫完之后我z只是知道该起了,至于具体时间由我灵活控制。
三.线程的等待
由于线程是并发执行的,无法确定哪个线程先执行哪个线程后执行,所以引入线程等待,通过调用join()方法来实现线程等待。在线程1里调用线程2.join,1线程就要等待线程2执行完以后再执行,线程2不执行完毕线程1就会阻塞等待(干等)。
四.线程的状态
NEW 系统中的线程还创建出来,只是有个Thread对象
TERMINATED 系统中的线程已经执行完毕,Thread对象还在
RUNNABLE就绪状态:1.正在CPU上运行;2.准备好随时可以去CPU上运行
TIMED_WAITING 指定时间等待。sleep方法
BLOCK 表示等待锁出现的状态
WAITING 使用wait方法出现的状态。