本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

Thread.sleep()不会释放锁码?

发布于2021-03-13 14:05     阅读(1308)     评论(0)     点赞(22)     收藏(3)


本人刚开始学多线程,在看到sleep的时候遇到了疑问,直接上代码。

class Number implements Runnable{

    private int num = 1;
    public void run() {
        while(true){
            synchronized (this) {
                if (num <= 100) {
                    try {
                        //暂停当前线程,把cpu片段让出给其他线程,减缓当前线程的执行。
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + ":" + num);
                    num++;
                }else{
                    break;
                }
            }
        }
    }
}

public class ThreadCommunication {

    public static void main(String[] args) {
        Number number = new Number();

        Thread thread1 = new Thread(number);
        Thread thread2 = new Thread(number);

        thread1.setName("线程1");
        thread2.setName("线程2");

        thread1.start();
        thread2.start();
    }
}

下面是运行结果

线程1:1
线程2:2
线程1:3
线程2:4
线程1:5
线程2:6
线程1:7
线程2:8
线程1:9
线程2:10
线程1:11
线程1:12
线程1:13
线程1:14
线程1:15
线程1:16
线程2:17
......

**这里在线程1拿到锁之后进行sleep(),如果sleep()不会释放锁的话,为什么会有线程2进来,不应该是线程1一直打印完100吗,有大佬知道为什么吗?
**

原文链接:https://blog.csdn.net/qq_19742553/article/details/114660194



所属网站分类: 技术文章 > 博客

作者:小可爱们

链接:http://www.javaheidong.com/blog/article/114361/66e3b8c700cd84a4e320/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)