• java并发:初探sleep方法


    sleep与wait

    sleep是Thread方法,使得当前线程从运行态变为阻塞态。但它不会释放对象的锁。
    wait方法是Object方法,它的作用是使得当前拥有对象锁的线程从运行态变为阻塞态,
    它会释放对象的锁

    sleep测试

    package com.java.javabase.thread.sleep;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class SleepTest {
        private static int coutsize = 10;
        private static Object obj = new Object();
    
        public static void main(String[] args) {
            Thread t1 =new ThreadOne("t1");
            Thread t2 =new ThreadOne("t2");
            t1.start();
            t2.start();
        }
    
        static class ThreadOne extends Thread {
            public ThreadOne(String name){
                super(name);
            }
            @Override
            public void run() {
                synchronized (obj){
                    int i = 0;
                    try {
                        while (i < coutsize) {
    
                            log.info("current thread is : {} sleep {} times ",Thread.currentThread().getName(),i++);
    
                            Thread.sleep(300);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
    
            }
    
        }
    }
    
    

    说明

    对于拥有同一个Object对象的两个线程,当一个线程持有对象的锁,虽然多次执行Thread,线程从运行态变为阻塞态,但也不会释放对象的锁,
    其他的线程只能等待。

    测试结果

    2019-07-29 16:49:22,156   [t1] INFO  SleepTest  - current thread is : t1 sleep 0 times 
    2019-07-29 16:49:22,469   [t1] INFO  SleepTest  - current thread is : t1 sleep 1 times 
    2019-07-29 16:49:22,782   [t1] INFO  SleepTest  - current thread is : t1 sleep 2 times 
    2019-07-29 16:49:23,094   [t1] INFO  SleepTest  - current thread is : t1 sleep 3 times 
    2019-07-29 16:49:23,407   [t1] INFO  SleepTest  - current thread is : t1 sleep 4 times 
    2019-07-29 16:49:23,720   [t1] INFO  SleepTest  - current thread is : t1 sleep 5 times 
    2019-07-29 16:49:24,032   [t1] INFO  SleepTest  - current thread is : t1 sleep 6 times 
    2019-07-29 16:49:24,345   [t1] INFO  SleepTest  - current thread is : t1 sleep 7 times 
    2019-07-29 16:49:24,658   [t1] INFO  SleepTest  - current thread is : t1 sleep 8 times 
    2019-07-29 16:49:24,970   [t1] INFO  SleepTest  - current thread is : t1 sleep 9 times 
    2019-07-29 16:49:25,283   [t2] INFO  SleepTest  - current thread is : t2 sleep 0 times 
    2019-07-29 16:49:25,596   [t2] INFO  SleepTest  - current thread is : t2 sleep 1 times 
    2019-07-29 16:49:25,909   [t2] INFO  SleepTest  - current thread is : t2 sleep 2 times 
    2019-07-29 16:49:26,221   [t2] INFO  SleepTest  - current thread is : t2 sleep 3 times 
    2019-07-29 16:49:26,534   [t2] INFO  SleepTest  - current thread is : t2 sleep 4 times 
    2019-07-29 16:49:26,847   [t2] INFO  SleepTest  - current thread is : t2 sleep 5 times 
    2019-07-29 16:49:27,159   [t2] INFO  SleepTest  - current thread is : t2 sleep 6 times 
    2019-07-29 16:49:27,472   [t2] INFO  SleepTest  - current thread is : t2 sleep 7 times 
    2019-07-29 16:49:27,785   [t2] INFO  SleepTest  - current thread is : t2 sleep 8 times 
    2019-07-29 16:49:28,098   [t2] INFO  SleepTest  - current thread is : t2 sleep 9 times 
    
  • 相关阅读:
    git命令使用方法
    git与svn对比
    浏览器缓存原理
    网络性能优化常用方法
    sass/scss 和 less的区别
    AngularJS和ReactJS对比
    让IE6,7,8支持HTML5新标签的方法
    Retina 屏移动设备 1px解决方案
    HttpClient学习
    国家二字码对照表
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11265945.html
Copyright © 2020-2023  润新知