1.sleep
Thread.sleep(1000):
- 静态方法,
- 休眠时间单位时ms,
- 使用位置,线程run方法内,
- 调用线程休眠方法,线程进入阻塞状态,待线程休眠结束,进入就绪状态
@Override public void run() { while (true){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("+Thread.currentThread().getName()+); } } |
2.join
- 创建线程对象调用join(),其作用时该线程执行完毕后,其它线程才会执行,
- 如果在某个线程在另一个线程t上调用join,此线程将被挂起,知道目标线程t结束才恢复(即t.isAlive()返回为假)
- 也可以在调用join(2)时,带上一个超时参数(单位可以是毫秒,或者纳秒),这样如果目标线程在这段时间到期时还没有结束的话,join()方法总能返回,
- 对join()的方法可以被中断,做法时在调用线程上调用interrupt()。
3.yield
- Thread.yield()的调用时对线程调度器(java线程机制的一部分,可以将当前线程的CPU转移给另外一个线程)的一种建议
- 当前线程暂停(建议,暗示,不一定会执行),不是阻塞线程,是将线程转为就绪状态
- 如果调用了yield方法之后,没有其它等待执行的线程,当前线程会马上回复执行
4.setDaemon
- 可以将指定的线程设置成后台线程,所谓的后台线程,是指在程序中运行的时候在后台提供一种通用的服务线程,并且这种线程不属于程序中不可或缺的部分,
- 当所有的非后台线程结束后,后台线程也中止了(无论后台线程是否执行完),同时会杀死所有的后台线程
- 可以调用isDaemon()确定当前线程是否是后台线程
5.interrupt
- 并不是中断线程,而是需要被中断线程自己处理
-
@Override public void run() { while (!Thread.currentThread().isInterrupted()){ try { sleep(1200); } catch (InterruptedException e) { System.out.println("catch处理前: "+currentThread().isInterrupted()); currentThread().interrupt(); e.printStackTrace(); System.out.println("catch处理后:"+currentThread().isInterrupted()); } } }
6.stop
- 结束线程,不推荐使用,已废弃