gpt4 book ai didi

java - 我们什么时候在处理 'GET' 的 java 方法上使用 Synchronized ?

转载 作者:行者123 更新时间:2023-11-30 05:33:33 27 4
gpt4 key购买 nike

尝试理解并发概念。 我看到一个带有 Controller 类的 springboot 应用程序,该类有 2 个方法:

@RequestMapping(value = "/r1", produces = "application/json; charset=utf-8", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<> function1(...){...}

以及同一类别中的另一个:

  @RequestMapping(value = "/r2", produces = "application/json; charset=utf-8", method = RequestMethod.GET)
@ResponseBody
public synchronized ResponseEntity<>(...){....}

我的问题是,如果这两个方法都在同一个类中,并且由于同步方法锁定了该类的整个对象,那么它是否也会锁定非同步方法?

最佳答案

问题:我的问题是,如果两个方法都在同一个类中,并且由于同步方法会锁定该类的整个对象,那么它是否也会锁定非同步方法?

答案:不,只有同步方法才会被阻塞,而所有其他线程都尝试在同一对象上调用同步方法。

Synchronized Methods从文档中可以清楚地看出,同一时刻只有一个线程可以在对象上执行同步方法,而尝试在同一对象上执行同步方法的所有其他线程都将被阻止。

但是如果两个线程使用两个不同的对象,仍然可以同时执行同步方法

First, it is not possible for two invocations of synchronized methods on the same object to interleave.When one thread is executing a synchronized method for an object, all other threads that invoke synchronized methods for the same object block (suspend execution) until the first thread is done with the object.

Second, when a synchronized method exits, it automatically establishes a happens-before relationship with any subsequent invocation of a synchronized method for the same object. This guarantees that changes to the state of the object are visible to all threads.

关于java - 我们什么时候在处理 'GET' 的 java 方法上使用 Synchronized ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com