Join,sleep,yield,守护线程
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.fh.interview; /** * join测试 * * * sleep和wait方法的区别 * * 1、sleep()方法是Thread的静态方法,而wait是Object实例方法 2、wait()方法必须要在同步方法或者同步块中调用,也就是必须已经获得对象锁。 而sleep()方法没有这个限制可以在任何地方种使用。 另外,wait()方法会释放占有的对象锁,使得该线程进入等待池中, 等待下一次获取资源。而sleep()方法只是会让出CPU并不会释放掉对象锁; 3、sleep()方法在休眠时间达到后如果再次获得CPU时间片就会继续执行, 而wait()方法必须等待Object.notift/Object.notifyAll通知后, 才会离开等待池,并且再次获得CPU时间片才会继续执行 yield方法: 一旦執行,让出cpu时间,再下一次竞争中获取时间片,继续执行 让出的cpu时间只能分配给相同优先级的线程 * * @author * @create 2018-05-27 下午3:48 **/ public class JoinDemo { public static void main(String[] args) { Thread preThread = new Thread(); for (int i=1;i<10;i++){ Thread currentThread = new JoinThread(preThread); currentThread.start(); preThread=currentThread; } } static class JoinThread extends Thread{ private Thread thread; public JoinThread(Thread thread){ this.thread=thread; } @Override public void run() { try { thread.join(); System.out.println("thread name:"+thread.getName()); }catch (Exception e){ e.printStackTrace(); } } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.fh.interview; /** * @author * @create 2018-05-27 下午4:07 **/ public class DaemonDemo { public static void main(String[] args) { Thread daemo = new Thread(){ @Override public void run() { while (true){ try { System.out.println("I am alive"); Thread.sleep(500); }catch (Exception e){ e.printStackTrace(); }finally { System.out.println("finally block"); } } } }; daemo.setDaemon(true); daemo.start(); try { Thread.sleep(800); }catch (Exception e){ e.printStackTrace(); } } }