Rumah >Java >javaTutorial >Bagaimana untuk melaksanakan pengaturcaraan serentak menggunakan semaphore di Jawa?

Bagaimana untuk melaksanakan pengaturcaraan serentak menggunakan semaphore di Jawa?

王林
王林asal
2024-05-01 09:33:021187semak imbas

Pengaturcaraan serentak dalam Java boleh mengawal akses kepada sumber yang dikongsi dengan menggunakan semaphore. Langkah-langkah khusus termasuk: buat semaphore, dapatkan semaphore (teruskan jika ada, jika tidak sekat), dan lepaskan semaphore. Dalam kes praktikal, semaphore digunakan untuk mengawal akses kepada pencetak, membenarkan hanya satu benang untuk mencetak pada satu masa.

如何使用 Java 中的信号量实现并发编程?

Cara melaksanakan pengaturcaraan serentak menggunakan semaphore dalam Java

Di Java, semaphore ialah primitif pengaturcaraan serentak yang membolehkan kita mengawal akses kepada sumber yang dikongsi. Semaphore dilaksanakan dengan mengekalkan pembilang yang mewakili jumlah sumber yang tersedia. Apabila benang perlu mengakses sumber, ia akan cuba memperoleh semaphore. Jika semaphore tersedia, benang boleh meneruskan pelaksanaan. Jika tidak, benang akan disekat sehingga semaphore tersedia.

Melaksanakan semaphore

Kelas Semaphore dalam Java menyediakan pelaksanaan semaphore. Kita boleh mencipta semaphore menggunakan langkah-langkah berikut: Semaphore 类提供了一个信号量的实现。我们可以使用以下步骤创建一个信号量:

import java.util.concurrent.Semaphore;

public class MySemaphore {

    private Semaphore semaphore;

    public MySemaphore(int permits) {
        semaphore = new Semaphore(permits);
    }

    public void acquire() throws InterruptedException {
        semaphore.acquire();
    }

    public void release() {
        semaphore.release();
    }
}

实战案例

考虑以下场景:我们有一个共享的打印机,并且有多个线程需要使用它。为了防止线程同时访问打印机,我们将使用信号量来控制对打印机的访问。

import java.util.concurrent.Semaphore;

public class Printer {

    private Semaphore semaphore = new Semaphore(1);

    public void print(String document) {
        try {
            semaphore.acquire();
            // 打印文档
        } finally {
            semaphore.release();
        }
    }
}

public class Main {

    public static void main(String[] args) {
        Printer printer = new Printer();

        Thread thread1 = new Thread(() -> printer.print("Document 1"));
        Thread thread2 = new Thread(() -> printer.print("Document 2"));

        thread1.start();
        thread2.start();
    }
}

在这个示例中,我们创建了一个 Printer 类,该类包含一个 Semaphore 实例。print 方法使用 acquire 方法获取信号量,仅当信号量可用时才允许线程继续执行。最后,releaserrreee

🎜Contoh Praktikal🎜🎜🎜Pertimbangkan senario berikut: Kami mempunyai pencetak dikongsi dan berbilang benang perlu menggunakannya. Untuk mengelakkan benang daripada mengakses pencetak pada masa yang sama, kami akan menggunakan semafor untuk mengawal akses kepada pencetak. 🎜rrreee🎜Dalam contoh ini, kami mencipta kelas Pencetak yang mengandungi contoh Semaphore. Kaedah print menggunakan kaedah acquire untuk memperoleh semaphore, membenarkan urutan untuk meneruskan pelaksanaan hanya jika semaphore tersedia. Akhir sekali, kaedah release mengeluarkan semaphore selepas pencetakan selesai supaya benang lain boleh menggunakan pencetak. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengaturcaraan serentak menggunakan semaphore di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn