文档章节

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
粉丝 42
博文 107
码字总数 47780
作品 0
青岛
程序员

暂无文章

mysql 数据类型及占用字节数

数字类型 TINYINT                           1 字节 SMALLINT                          2 个字节 MEDIUMINT                         3 个字节...

会游泳的鱼_
今天
3
0
高性能mysql:创建高性能的索引

性能优化简介 MySQL性能定义为完成某件任务所需要的时间量度,换句话说,性能即响应时间,这是一个非常重要的原则。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语...

背后的辛酸
今天
6
0
HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
今天
3
0
IDEA中tomcat启动慢 耗时10分钟

用idea中的tomcat以debug模式启动,会非常的慢,而正常启动没啥问题;原因是debug模式中View Breakpoints断点代码,断点的是jar包,而现在启动由于jar包发生变化,导致启动时一直处于等待中。...

GoodMarver
今天
5
0
Linux学习-10月18(awk)

9.6/9.7 awk 一、awk简介   1. awk是一种编程语言,用于对文本和数据进行处理的   2. 具有强大的文本格式化能力   3. 利用命令awk,可以将一些文本整理成为我们想要的样子   4. 命令awk...

wxy丶
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部