下面的代码中什么是同步关键字?

时间:2019-04-15 04:08:11

标签: java multithreading synchronized

我想知道以下代码中的 synchronized 关键字是做什么的,一个是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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

在此处https://www.baeldung.com/java-synchronized

详细了解此内容,并提供一些有用的示例。