zoukankan      html  css  js  c++  java
  • Join,sleep,yield,守护线程

    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();
                }
            }
        }
    }
    View Code
    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();
            }
        }
    }
    View Code
  • 相关阅读:
    什么是ROR
    Struts2中使用Session的两种方法
    js的时间操作方法
    产生4位包含大小字母与数字的验证码
    Java关键字this、super使用总结
    java 反射的实例
    Java语言中定义常量注意事项
    java 静态方法和实例方法的区别
    多线程的例子
    java 中的内省机制
  • 原文地址:https://www.cnblogs.com/nihaofenghao/p/9096363.html
Copyright © 2011-2022 走看看