什么是同步关键字在下面的代码中做什么? [重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我想知道在下面的代码中同步关键字是做什么的,一个是在send()方法,另一个是在receive()方法。

在哪个竞争条件场景/场景中,synchronized关键字想要阻止?

非常感谢你!

public class Data {
    private String packet;

    // True if receiver should wait
    // False if sender should wait
    private boolean transfer = true;

    public synchronized void send(String packet) {
        while (!transfer) {
            try { 
                wait();
            } catch (InterruptedException e)  {
                Thread.currentThread().interrupt(); 
                Log.error("Thread interrupted", e); 
            }
        }
        transfer = false;

        this.packet = packet;
        notifyAll();
    }

    public synchronized String receive() {
        while (transfer) {
            try {
                wait();
            } catch (InterruptedException e)  {
                Thread.currentThread().interrupt(); 
                Log.error("Thread interrupted", e); 
            }
        }
        transfer = true;

        notifyAll();
        return packet;
    }
}
java multithreading synchronized
1个回答
0
投票

Java中的synchronized关键字确保一次只能在一个方法中使用一个线程。如果您熟悉其他并发模式,它相当于在方法周围放置一个信号量标志。

阅读更多相关信息,并提供一些有用的示例:https://www.baeldung.com/java-synchronized

© www.soinside.com 2019 - 2024. All rights reserved.