Rumah > Java > javaTutorial > teks badan

Apakah strategi pelaksanaan yang berbeza untuk keselamatan benang fungsi Java?

王林
Lepaskan: 2024-05-03 21:33:02
asal
965 orang telah melayarinya

Strategi pelaksanaan untuk keselamatan benang fungsi Java termasuk: 1. Kaedah disegerakkan, membenarkan hanya satu utas untuk dilaksanakan 2. Menggunakan blok kod disegerakkan untuk mengisytiharkan objek kunci sebagai bahagian kritikal, dan hanya utas yang memperoleh objek kunci boleh melaksanakan; kod; 3. Menggunakan koleksi selamat-benang dan struktur data yang disediakan oleh perpustakaan konkurensi Java 4. Buat objek tidak boleh diubah yang sememangnya selamat untuk benang. Strategi ini memastikan ketekalan data dan ketepatan program dalam persekitaran berbilang benang.

Java 函数线程安全性的不同实现策略有哪些?

Strategi pelaksanaan yang berbeza untuk memastikan keselamatan benang bagi fungsi Java

Dalam persekitaran berbilang benang, keselamatan benang adalah penting untuk mengelakkan perlumbaan data dan ralat program. Untuk keselamatan benang fungsi Java, terdapat strategi pelaksanaan yang berbeza seperti berikut:

1 Kaedah disegerakkan

Kaedah disegerakkan hanya membenarkan satu utas untuk dilaksanakan pada masa yang sama, dengan itu mencapai keselamatan benang.

public class SafeCounter {
    private int count = 0;

    public synchronized int increment() {
        return ++count;
    }
}
Salin selepas log masuk

2. Gunakan blok kod disegerakkan

segerak (lockObject) { ... } pernyataan untuk mengisytiharkan objek kunci sebagai bahagian kritikal. Dalam bahagian kritikal, hanya benang yang memperoleh objek kunci boleh melaksanakan kod.

public class SafeCounter {
    private int count = 0;
    private final Object lock = new Object();

    public void increment() {
        synchronized (lock) {
            count++;
        }
    }
}
Salin selepas log masuk

3. Gunakan Java Concurrency Library

java.util.concurrent pakej menyediakan koleksi dan struktur data selamat benang seperti ConcurrentHashMap dan AtomicInteger.

import java.util.concurrent.ConcurrentHashMap;

public class SafeCounter {
    private ConcurrentHashMap<String, Integer> counts = new ConcurrentHashMap<>();

    public int increment(String key) {
        return counts.computeIfAbsent(key, k -> 0) + 1;
    }
}
Salin selepas log masuk

4. Objek Kekal

Objek tidak berubah tidak boleh diubah suai selepas penciptaan, jadi ia sememangnya selamat untuk benang.

public final class ImmutableCounter {
    private final int count;

    public ImmutableCounter(int count) {
        this.count = count;
    }

    public int getCount() {
        return count;
    }
}
Salin selepas log masuk

Kes praktikal

Katakan kita mempunyai aplikasi berbilang benang di mana berbilang benang perlu mengemas kini kaunter kongsi. Dengan menggunakan strategi keselamatan benang ini, kami boleh membuat pelaksanaan kaunter selamat benang:

public class Main {
    public static void main(String[] args) {
        // 使用不同策略创建线程安全的计数器
        SafeCounter counter1 = new SafeCounter();
        SafeCounter counter2 = new SafeCounter();
        SafeCounter counter3 = new SafeCounter();

        // 创建多个线程并发地更新计数器
        Thread[] threads = new Thread[10];
        for (int i = 0; i < threads.length; i++) {
            threads[i] = new Thread(() -> {
                for (int j = 0; j < 1000; j++) {
                    counter1.increment();
                    counter2.increment();
                    counter3.increment();
                }
            });
        }

        // 启动线程并等待它们完成
        for (Thread thread : threads) {
            thread.start();
        }

        // 线程安全策略确保所有线程完成时,计数器包含正确的计数
        System.out.println("Counter1: " + counter1.increment());
        System.out.println("Counter2: " + counter2.increment());
        System.out.println("Counter3: " + counter3.increment());
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah strategi pelaksanaan yang berbeza untuk keselamatan benang fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan