简单的问题,但是我没有多线程经验。 如果两个线程使用相同的同步方法(在Java中),并且第一个线程无法在给定时间访问该方法(因为第二个线程正在使用它),则第一个线程会等待(冻结)一段时间,然后尝试访问它再来一次,还是只是放弃而根本不访问它?

#1楼 票数:3 已采纳

根据文档 ,第一个方法将阻塞并等待直到可以使用该方法

当一个线程正在执行对象的同步方法时,所有其他调用同一对象块的同步方法的线程(挂起执行),直到第一个线程对该对象完成。

我不确定是否可以正确记住100%,但是如果内存对我有用,那么JVM不会对线程在释放后能够获取锁的顺序提供任何保证。

#3楼 票数:0

等待。

JVM不允许两个线程同时在同一个对象上同步。 如果一个线程在第二个线程尝试同步时已经同步,则第二个线程将进入睡眠状态并添加到队列中。

每当线程释放锁时(即,当它从同步方法或块退出时),将唤醒该锁队列开头的线程,然后将其锁定。

  ask by JakeDiscBrake translate from so

未解决问题?本站智能推荐:

1回复

关于Java中的同步方法

我有一个关于Java中方法同步的问题。 考虑一个具有3个synchronized方法的类。 考虑myObject , myClass一个实例。 以下内容哪些是对的? 选项1: 线程不可能在myObject运行任何 synchronized方法,而另一个线程在myObj
3回复

Java中的同步方法

只是想检查以确保我理解这一点。 同步方法不会创建线程,对吗? 它只确保在同一进程(即JVM)中的一个线程正在使用它时,没有其他线程正在调用此方法,对吧?
1回复

在Java中同时访问同步方法时会发生什么?

好的,所以我正在尝试构建一个脚本,该脚本将在x台机器上自动执行一些测试...,我希望它们能够彼此对话。 我对线程有点陌生,并且我已经对使用同步方法进行了一些研究。 我的问题是,当两个单独的线程尝试访问它时会发生什么? 我知道它会锁定并为呼叫者提供独占访问权限,但是随后直接处理该行中的下一个
2回复

Java:通过反射多次访问同步方法?

我的一个班上有一个非常奇怪的行为,并且不知道究竟发生了什么。 1)我有一个使用AJAX向Servlet发送请求的JSP 2)servlet以下列方式处理此请求: - 它反映一个类,然后调用一个方法(作为参数提供) JSP),然后将方法的结果输出回Ajax。 所以这是原始问题,然后是我
6回复

在Java中同步方法的正确方法

我有一个示例课: process()实际上同时调用了这两种方法。 那么哪种方法更好呢? 同步methodOne和methodTwo或者, 同步process() (如上面的代码所述)? 以上两个选项都可以使用。 但是,哪个更有意义?
3回复

Java同步方法

考虑以下代码: 我有一个简单的问题:当线程1调用onSignalsTimeout方法时,线程2可以访问在该方法中访问的对象吗? 如果'synchronized'锁只能访问此方法或访问此方法中使用的所有对象,则无法找到任何位置。
4回复

Java同步方法

我有一些共享变量x,y,z,所有这些变量都可以在两个不同的线程中运行两种不同的方法进行修改。(比如线程1中的方法1和线程2中的方法2)。 如果我将这两个方法声明为synchronized,它是否保证变量x,y和z的一致性。 或者我应该在每个变量上单独使用锁?
5回复

同步方法Java

我对线程之间的同步有疑问。 确实,我有一个只读取静态变量的方法。 一些线程访问此变量,但没有写入,只有读取。 我必须声明Synchonized方法吗?