• 多线程中sleep方法,简单介绍。


    一 是什么?

    package com.aaa.threaddemo;
    /*
     * 多线程中的sleep方法? 
     *         sleep 隶属于Thread的方法,顾名思义,让线程睡一会。
                 1 public static native void sleep(long millis) throws InterruptedException; 使用需要try catch,或者  声明一个异常,才能使用。
                 2    long 跟的时间单位是秒          
                 3    会让线程进入阻塞状态
                 4 调用线程会【暂时让出指定时间】的执行权。让出CPU,但是监控状态依然保持着。
                 5 线程不会释放对象锁。
                 6 如果在睡眠期间其他线程调用了该线程的interrupt()方法中断了该线程,则该线程会在调用sleep方法的地方抛出InterruptedException异常而返回。
     */
    public class ThreadRun {
        public static void main(String[] args) throws InterruptedException {
            Thread1 thread1 = new Thread1();
            thread1.start();
            //在thread1 阻塞的情况下,让其中断,会抛出异常          java.lang.InterruptedException
            thread1.interrupt();        
        }
    }
    
    class Thread1 extends Thread{
        @Override
        public void run() {    
            try {
                System.out.println("1111");        
                // 让子线程休息一秒, 在一秒内线程让出CPU,此时thread1 进入阻塞状态。
                // 一秒后函数正常返回,参与CPU的调度。获取到CPU资源进入到运行状态。
                Thread1.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    二 验证sleep,监控状态依然保持。      原文 https://zhuanlan.zhihu.com/p/259158177

    package com.aaa.threaddemo;
    
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    /*
     * 多线程中的sleep方法? 
     *         sleep 隶属于Thread的方法,顾名思义,让线程睡一会。
                 1 public static native void sleep(long millis) throws InterruptedException; 使用需要try catch,或者  声明一个异常,才能使用。
                 2    long 跟的时间单位是秒          
                 3    会让线程进入阻塞状态
                 4 调用线程会【暂时让出指定时间】的执行权。让出CPU,但是监控状态依然保持着。
                 5 线程不会释放对象锁。
                 6 如果在睡眠期间其他线程调用了该线程的interrupt()方法中断了该线程,则该线程会在调用sleep方法的地方抛出InterruptedException异常而返回。
     */
    public class ThreadRun {
        private static ReentrantLock lock = new ReentrantLock();
        
        public static void main(String[] args) throws InterruptedException {
            Thread thread1 =  new Thread(new Runnable() {
                public void run() {
                    //创建独占锁   
                    lock.lock();
                    try {
                        System.out.println("线程1开始睡觉");    
                        Thread.sleep(1000);
                        System.out.println("线程1结束睡觉");    
                        
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }finally {
                        //解除锁
                        lock.unlock();
                    }    
                }
            });
            
            Thread thread2 =  new Thread(new Runnable() {
                public void run() {
                    //创建独占锁
                    lock.lock();
                    try {
                        System.out.println("线程2开始睡觉");    
                        Thread.sleep(2000);
                        System.out.println("线程2结束睡觉");    
                        
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }finally {
                        lock.unlock();
                    }
                }
            });
            
            
            thread1.start();
            thread2.start();
        }
    }

  • 相关阅读:
    git clone time out
    Window版本的nvm下载安装以及配置
    jdk安装目录查询
    idea 快捷键
    faac简介、编译、使用
    socket编程实例TCP
    jsoncpp简介、下载、编译、使用
    时间时区概念及常用时间函数
    开启博客之旅
    找回了用户名和密码
  • 原文地址:https://www.cnblogs.com/ZXF6/p/14086783.html
Copyright © 2020-2023  润新知