文档章节

sleep和wait的区别

清尘V
 清尘V
发布于 2016/05/12 20:11
字数 247
阅读 74
收藏 2

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

wait方法需要在synchronized块里使用,阻塞当前线程,并且释放所持有对象的锁;sleep方法阻塞当前线程但是并不会释放锁,具体示例可以参考:http://www.whereta.com/article/detail/65

下面可以参考实例:

测试方法:

package com.vincent;

import org.apache.commons.lang3.StringUtils;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Vincent 创建于 2016/5/11.
 */
public class Main {
    public static void main(String[] args) {

        StringUtils.isBlank("");

        ExecutorService threadPool = Executors.newCachedThreadPool();
        final WaitDemo synchronizedDemo=new WaitDemo();

        for (int i=0;i<3;i++){
            threadPool.execute(new Runnable() {
                public void run() {
                    synchronizedDemo.a();
                }
            });

        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for (int i=0;i<5;i++){
            threadPool.execute(new Runnable() {
                public void run() {
                    synchronizedDemo.b();
                }
            });
        }
    }
}

wait例子:

package com.vincent;

/**
 * Vincent 创建于 2016/5/12.
 */
public class WaitDemo {

    public synchronized void a() {
        while (true) {
            System.out.println("----a---" + System.currentTimeMillis());
            try {
                this.wait(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void b() {
        while (true) {
            System.out.println("----b---" + System.currentTimeMillis());
        }
    }


}

输出:

----a---1463054978359
----a---1463054978359
----a---1463054978359
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360
----b---1463054979360

从上面可以看出,先执行a方法,遇到a的wait释放锁,其他线程得以执行b方法

© 著作权归作者所有

清尘V

清尘V

粉丝 41
博文 107
码字总数 47780
作品 0
青岛
程序员
私信 提问
加载中

评论(0)

暂无文章

中国城市中心点坐标

以下为经过整理的地区数据,可以直接复制到json中使用 '上海': [121.487899486, 31.24916171], '临沧': [100.092612914, 23.8878061038], '丽江': [100.229628399, 26.8753510895], '保山': ......

osc_3nr2bq5w
17分钟前
13
0
apply,call ,bind

通过 apply(),call() 方法,能够编写用于不同对象的方法 . 这两个方法是一样的,差别在于接受参数形式不同,apply接受数组 ,call接受字符串参数 bind 目的是创建一个新函数 ,这个新函数的t...

东东笔记
18分钟前
16
0
pandas之cut(),qcut()

https://www.cnblogs.com/nicetoseeyou/p/10655422.html pandas之cut(),qcut() 功能:将数据进行离散化 可参见博客:https://blog.csdn.net/missyougoon/article/details/83986511 , 例子简易......

osc_bskubcvl
19分钟前
18
0
优雅地使用pt-archiver进行数据归档(转)

一、引言 最近由于业务需求,需要将公有云RDS(业务库)的大表数据归档至私有云MySQL(历史库),以缩减公有云RDS的体积和成本。 那么问题来了,数据归档的方式有n种,选择哪种呢?经过一番折...

osc_1ipdqsf2
20分钟前
12
0
api接口安全性问题

首先是正常的接口安全性设计 1、参数签名,防止篡改(MD5,SHA1,hmacSHA1) 2、防止重放校验(一次性的验证码,接口幂等性) 3、接口加密(RSA,AES等加解密算法),可以采用rsa加密签名,a...

花树堆雪
20分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部