gpt4 book ai didi

java - 了解同步方法

转载 作者:行者123 更新时间:2023-12-03 18:18:34 27 4
gpt4 key购买 nike

我是并发的新手,想问以下问题。我有以下类(class):

public class MyClass{

public synchronized void method1(){
//do some
}

public synchronized void method2(){
//do another some
}
}

因此,据了解,当某个线程开始执行其中一个方法时,它会获取 this 上的锁。我的问题是这是否意味着任何其他线程都不能执行同一对象的任何方法,除非该线程释放 this 并且如果要允许并发调用我应该怎么做?

最佳答案

这意味着没有其他线程可以执行同一对象的任何同步方法。如果一个方法不是同步的,它不会尝试获取锁,所以它可以被不同的线程并发调用。 (当然,那你得自己确认这个方法是线程安全的。)

如果你想更多地控制同步策略,你需要创建和维护你自己的锁。经典的方法如下所示:

class {
Object lock1;
Object lock2;
void method1() {
synchronized (lock1) {
...
}
}
void method2() {
synchronized (lock2) {
...
}
}
}

这利用了每个 Java 对象都带有一个内置锁的事实。现在这两个方法使用自己的锁,所以当 method1 被一个线程锁定时,不同的线程仍然可以调用 method2

为了更好地控制有多少线程可以读取或写入您的对象,您可以使用 java.util.concurrent.locks 包中的锁。

关于java - 了解同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241343/

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