同步块中的 sleep() 方法行为

尼兹
class ThreadRunnable implements Runnable{
  synchronized public void run(){       
    System.out.println("In Runnable implemented class");

    try {
        Thread.sleep(60000);
        System.out.println("sleeping over");
        System.out.println(System.currentTimeMillis());
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }
}

public class Sample {
    public static void main(String [] args){
        ThreadRunnable tr = new ThreadRunnable();

        Thread t1 = new Thread(tr);

        Thread t2 = new Thread(new ThreadRunnable());

        t1.start();
        t2.start();
    }
}

在同步方法中,t2 线程应该在 t1 之后打印 SOP,但两个线程同时打印 SOP。谁能告诉我为什么?

阿西利亚斯

一个synchronized方法在 上隐式同步this在您的情况下,ThreadRunnable.

但是每个线程都有自己的实例,因此它们使用两个不同的监视器。

您有多种选择来解决您的问题,例如:

  • 使用 aprivate static final Object lock = new Object();作为带有同步块的监视器。
  • 或者更简单 Thread t2 = new Thread(tr);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中的同步方法和同步块

来自分类Dev

main方法中的同步块

来自分类Dev

在同步方法内部的线程中的同步块会发生什么?

来自分类Dev

Java中的同步块与同步方法限定符

来自分类Dev

__sleep()类似Python中的方法

来自分类Dev

Task.Delay 或 Thread.Sleep 在同步方法中暂停执行

来自分类Dev

具有同步和异步调用者的同步方法中的Thread.Sleep或Task.Delay

来自分类Dev

Java中同步块/方法中处理异常的最佳实践

来自分类Dev

同步ArrayList与同步方法块

来自分类Dev

sleep()与MessageBox行为不符

来自分类Dev

python中time.sleep的奇怪打印行为

来自分类Dev

Java在同步块中调用其他方法

来自分类Dev

在java中的同步块内调用@async方法

来自分类Dev

在异步方法中调用Thread.sleep()

来自分类Dev

方法 sleep 在 Java 中是如何工作的

来自分类Dev

信号量C#对象同步方法是从未同步的代码块中调用的

来自分类Dev

在同步方法内部的线程中的同步块会发生什么情况?

来自分类Dev

同步方法或同步块:在java中编写单例类时哪个更好?

来自分类Dev

Thread.sleep()的异常行为

来自分类Dev

Thread.sleep()的异常行为

来自分类Dev

同步方法和同步块之间的区别

来自分类Dev

Nashorn:同步方法和块

来自分类Dev

Android中Thread.sleep方法的替代方法

来自分类Dev

在对象方法链(JS)中添加sleep方法

来自分类Dev

Android中Thread.sleep方法的替代方法

来自分类Dev

Kotlin中“ For循环”中Thread.Sleep()的替代方法?

来自分类Dev

在Eclipse中,如何查找锁定特定类实例的所有Java同步块/方法

来自分类Dev

当线程进入Java中的同步块/方法时会发生什么情况

来自分类Dev

在Eclipse中,如何查找锁定特定类实例的所有Java同步块/方法

Related 相关文章

  1. 1

    Java中的同步方法和同步块

  2. 2

    main方法中的同步块

  3. 3

    在同步方法内部的线程中的同步块会发生什么?

  4. 4

    Java中的同步块与同步方法限定符

  5. 5

    __sleep()类似Python中的方法

  6. 6

    Task.Delay 或 Thread.Sleep 在同步方法中暂停执行

  7. 7

    具有同步和异步调用者的同步方法中的Thread.Sleep或Task.Delay

  8. 8

    Java中同步块/方法中处理异常的最佳实践

  9. 9

    同步ArrayList与同步方法块

  10. 10

    sleep()与MessageBox行为不符

  11. 11

    python中time.sleep的奇怪打印行为

  12. 12

    Java在同步块中调用其他方法

  13. 13

    在java中的同步块内调用@async方法

  14. 14

    在异步方法中调用Thread.sleep()

  15. 15

    方法 sleep 在 Java 中是如何工作的

  16. 16

    信号量C#对象同步方法是从未同步的代码块中调用的

  17. 17

    在同步方法内部的线程中的同步块会发生什么情况?

  18. 18

    同步方法或同步块:在java中编写单例类时哪个更好?

  19. 19

    Thread.sleep()的异常行为

  20. 20

    Thread.sleep()的异常行为

  21. 21

    同步方法和同步块之间的区别

  22. 22

    Nashorn:同步方法和块

  23. 23

    Android中Thread.sleep方法的替代方法

  24. 24

    在对象方法链(JS)中添加sleep方法

  25. 25

    Android中Thread.sleep方法的替代方法

  26. 26

    Kotlin中“ For循环”中Thread.Sleep()的替代方法?

  27. 27

    在Eclipse中,如何查找锁定特定类实例的所有Java同步块/方法

  28. 28

    当线程进入Java中的同步块/方法时会发生什么情况

  29. 29

    在Eclipse中,如何查找锁定特定类实例的所有Java同步块/方法

热门标签

归档