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.查看线程状态

  1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法,即尚未启动的线程就处于该状态。
  2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
    线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running),在Java虚拟机中执行的线程都处于该状态。
  3. 阻塞(BLOCKED):表示线程阻塞,等待监视器锁定的线程处于该状态。
  4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断),正在等待其他线程执行的线程处于该状态。
  5. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回,在WAITING等待时间达到指定时间的线程处于该状态。
  6. 终止(TERMINATED):表示该线程已经执行完毕,已退出的线程处于该状态。