文档章节

sleep和wait的区别

清尘V
 清尘V
发布于 2016/05/12 20:11
字数 247
阅读 34
收藏 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
粉丝 41
博文 107
码字总数 47780
作品 0
青岛
程序员
私信 提问

暂无文章

Confluence 6 自定义你的空间

通过对你的空间进行界面的自定义能够让你的空间更加出类拔萃。 如果你具有空间管理员权限,你可以修改你空间的颜色配色,添加你自己的空间标识,选择是否在你空间中显示边栏。或者你可以进入...

honeymose
16分钟前
0
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部