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
  • 相关阅读:
    详解Java API之正则表达式
    ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数
    ios NSTimer的强引用问题
    ionic 接触的第一个Hybrid项目
    iOS 小经验:UIAnimation空对象导致crash
    iOS GCD 必读推荐,有关于单例使用问题
    ios NSString 转 float的注意
    iOS UIViewController 和 nib 相关的3个方法
    ios delegate 使用注意 assign,weak
    ios 使用autolayout 后button 的frame 无法设置问题!
  • 原文地址:https://www.cnblogs.com/nihaofenghao/p/9096363.html
Copyright © 2011-2022 走看看