1.线程停止(stop)
当run方法执行完后,线程就会退出。
一般来说推荐自定义结束标志,来使线程正常退出,也就是当run方法完成后线程终止。
还能使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,可能发生不可预料的结果);
或者使用interrupt方法中断线程。
2.线程休眠(sleep)
主要是让线程延缓工作时间,通过sleep()方法来模拟延时。
3.线程礼让(yield)
礼让不一定成功,要看CPU的脸色,例如对于多个线程,通过在run()方法中添加yield()方法可以实现礼让。
4.线程合并
本质上就是main方法执行中某个线程调用join()方法,这时将CPU资源给到该线程,并在它执行结束后才又回到main方法继续执行。
public class join implements Runnable {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("vip_thread"+i);
}
}
public static void main(String[] args) throws InterruptedException {
join j = new join();
Thread th = new Thread(j);
for (int i = 0; i < 1000; i++) {
System.out.println("normal_thread"+i);
if(i==100){
th.start();
th.join();
}
}
}
}
5.查看线程状态
- 初始(NEW):新创建了一个线程对象,但还没有调用start()方法,即尚未启动的线程就处于该状态。
- 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running),在Java虚拟机中执行的线程都处于该状态。 - 阻塞(BLOCKED):表示线程阻塞,等待监视器锁定的线程处于该状态。
- 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断),正在等待其他线程执行的线程处于该状态。
- 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回,在WAITING等待时间达到指定时间的线程处于该状态。
- 终止(TERMINATED):表示该线程已经执行完毕,已退出的线程处于该状态。