Rumah Java javaTutorial Cara membetulkan: Ralat Java Concurrency: Kebuntuan benang

Cara membetulkan: Ralat Java Concurrency: Kebuntuan benang

Aug 18, 2023 pm 05:57 PM
Penyelesaian ralat java concurrency kebuntuan benang

Cara membetulkan: Ralat Java Concurrency: Kebuntuan benang

Cara menyelesaikan: Ralat Java Concurrency: Deadlock Thread

Pengenalan:
Dalam pengaturcaraan serentak, kebuntuan benang adalah masalah yang sangat biasa. Apabila beberapa utas bersaing untuk mendapatkan sumber, kebuntuan mungkin berlaku jika utas menunggu antara satu sama lain untuk mengeluarkan sumber. Artikel ini akan memperkenalkan konsep kebuntuan benang, puncanya, dan cara menyelesaikan masalah ini.

  1. Konsep kebuntuan benang
    Apabila beberapa utas menunggu antara satu sama lain untuk melepaskan sumber, semua utas tidak dapat meneruskan pelaksanaan, membentuk kebuntuan benang. Kejadian kebuntuan benang biasanya disebabkan oleh empat syarat berikut menjadi benar pada masa yang sama:
  2. Syarat pengecualian bersama: sumber hanya dibenarkan untuk diakses oleh satu utas pada masa yang sama.
  3. Minta dan tahan syarat: Walaupun thread menduduki sumber, ia juga meminta sumber diisi oleh thread lain.
  4. Tiada syarat kekurangan: Sumber hanya boleh dikeluarkan oleh benang yang memilikinya, dan benang lain tidak boleh melucutkannya.
  5. Keadaan menunggu gelung: Terdapat urutan menunggu urutan di mana setiap utas sedang menunggu urutan seterusnya mengeluarkan sumber.
  6. Punca kebuntuan benang
    Kebuntuan benang biasanya disebabkan oleh sebab berikut:
  7. Pertikaian sumber: Berbilang benang bersaing untuk sumber yang sama pada masa yang sama tanpa strategi penjadualan yang sesuai, mengakibatkan kebuntuan.
  8. Kebuntuan susunan kunci: Benang memperoleh kunci dalam susunan yang berbeza, menyebabkan satu sama lain saling menunggu untuk melepaskan kunci.
  9. Benang menunggu antara satu sama lain: Benang A menunggu benang B melepaskan kunci, dan benang B menunggu benang A melepaskan kunci, mengakibatkan kebuntuan.
  10. Kaedah untuk menyelesaikan kebuntuan benang
    Untuk menyelesaikan masalah kebuntuan benang, kita boleh mempertimbangkan kaedah berikut:

3.1 Elakkan menunggu secara bulat
Menunggu bulat adalah salah satu punca utama kebuntuan benang. Untuk mengelakkan menunggu bulat, anda boleh menggunakan algoritma pengisihan sumber, yang memerlukan benang untuk memperoleh kunci dalam susunan tertentu dan melepaskan kunci dalam susunan yang sama. Ini menghapuskan kemungkinan menunggu dalam gelung.

3.2 Satukan susunan penguncian
Situasi biasa dalam kebuntuan benang ialah benang yang berbeza memperoleh kunci dalam susunan yang berbeza, mengakibatkan menunggu antara satu sama lain. Untuk menyelesaikan masalah ini, kita boleh menetapkan bahawa semua benang mesti memperoleh kunci dalam susunan yang sama. Ini dapat mengelakkan berlakunya kebuntuan urutan kunci.

3.3 Gunakan mekanisme tamat masa kunci
Dalam pengaturcaraan berbilang benang, mekanisme tamat masa kunci boleh digunakan untuk mengelakkan kebuntuan benang. Apabila benang cuba memperoleh kunci untuk lebih daripada had masa tertentu dan gagal memperoleh kunci, ia boleh memilih untuk berhenti mendapatkan kunci dan mencuba kaedah pemprosesan lain.

Berikut ialah kod sampel yang menggunakan mekanisme tamat masa kunci untuk mengelakkan kebuntuan benang:

public class DeadlockExample {
    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (lock1) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock2) {
                    System.out.println("Thread 1");
                }
            }
        }).start();

        new Thread(() -> {
            synchronized (lock2) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock1) {
                    System.out.println("Thread 2");
                }
            }
        }).start();

        // 设置超时时间为2秒
        CompletableFuture<Object> future = CompletableFuture.supplyAsync(() -> {
            while (true) {
                if (Thread.holdsLock(lock1) && Thread.holdsLock(lock2)) {
                    return true;
                }
            }
        }).orTimeout(2000, TimeUnit.MILLISECONDS);
        try {
            future.get();
        } catch (TimeoutException e) {
            System.out.println("Deadlock detected!");
            // 执行适当的处理逻辑
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}
Salin selepas log masuk
  1. Ringkasan
    Kebuntuan benang adalah salah satu masalah biasa dalam pengaturcaraan serentak. Untuk menyelesaikan masalah kebuntuan benang, kita boleh mengelakkan menunggu gelung, menyatukan urutan penguncian, dan menggunakan mekanisme tamat masa kunci. Melalui strategi dan cara teknikal yang sesuai, masalah yang disebabkan oleh kebuntuan benang dapat dielakkan dengan berkesan dan keteguhan serta prestasi program serentak dapat dipertingkatkan.

Atas ialah kandungan terperinci Cara membetulkan: Ralat Java Concurrency: Kebuntuan benang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyelesaian ralat 0x80070026: pembetulan ralat kemas kini versi win101909 Penyelesaian ralat 0x80070026: pembetulan ralat kemas kini versi win101909 Dec 25, 2023 pm 05:10 PM

Semasa proses mengemas kini sistem, ramai rakan menemui gesaan kod ralat 0x80070026 dan tidak tahu cara menyelesaikannya Keadaan ini mungkin disebabkan oleh ralat dalaman dalam sistem, yang boleh dibaiki dalam gesaan arahan. Bagaimana untuk menyelesaikan ralat kemas kini versi win101909 0x80070026 1. Mula-mula lancarkan menu "Start", masukkan "cmd", klik kanan "Command Prompt" dan pilih jalankan sebagai "Administrator". 2. Kemudian masukkan arahan berikut dalam urutan (salin dan tampal dengan teliti): SCconfigwuauservstart=auto, tekan Enter SCconfigbitsstart=auto, tekan Enter SCconfigcryptsvc

Menyelesaikan masalah pemasangan panda biasa: tafsiran dan penyelesaian kepada ralat pemasangan Menyelesaikan masalah pemasangan panda biasa: tafsiran dan penyelesaian kepada ralat pemasangan Feb 19, 2024 am 09:19 AM

Tutorial pemasangan Pandas: Analisis ralat pemasangan biasa dan penyelesaiannya, contoh kod khusus diperlukan Pengenalan: Pandas ialah alat analisis data yang berkuasa yang digunakan secara meluas dalam pembersihan data, pemprosesan data dan visualisasi data, jadi ia sangat dihormati dalam bidang sains data. Walau bagaimanapun, disebabkan oleh konfigurasi persekitaran dan isu pergantungan, anda mungkin menghadapi beberapa kesukaran dan ralat semasa memasang panda. Artikel ini akan memberi anda tutorial pemasangan panda dan menganalisis beberapa ralat pemasangan biasa serta penyelesaiannya. 1. Pasang panda

Bagaimana untuk menyelesaikan ralat fatal win11steam Bagaimana untuk menyelesaikan ralat fatal win11steam Dec 26, 2023 pm 04:49 PM

Apabila sesetengah pemain menggunakan win11 untuk membuka wap atau permainannya, gesaan ralat maut muncul Jadi bagaimana untuk menyelesaikan ralat fatal win11, sebenarnya, ini berkaitan dengan jenis ralat. Bagaimana untuk menyelesaikan ralat maut win11steam 1. Mula-mula, sahkan sebab berikut untuk ralat maut. Seperti yang anda lihat dalam gambar di bawah, ralat ini disebabkan terutamanya oleh "laluan folder". 2. Jadi kita hanya perlu mengubah suai laluan pemasangan wap dan "tukar semua bahasa Cina kepada bahasa Inggeris". 3. Jika permainan tidak boleh dibuka, klik kanan untuk membuka tetapan "Properties" dan klik untuk memasukkan "Fail Tempatan". 4. Kemudian, pilih pilihan "Pindahkan folder pemasangan" dan alihkannya ke laluan tanpa nama Cina. 5

Penyelesaian kepada ralat Fatal PHP: Panggilan ke fungsi yang tidak ditentukan mime_content_type() Penyelesaian kepada ralat Fatal PHP: Panggilan ke fungsi yang tidak ditentukan mime_content_type() Jun 23, 2023 am 08:42 AM

Penyelesaian kepada PHPFatalerror:Calltoundefinedfunctionmime_content_type() Dalam proses membangunkan projek PHP, kadangkala anda akan sering menghadapi masalah ini - "PHPFatalerror:Calltoundefinedfunctionmime_content_type()" Ralat ini biasanya berlaku apabila menggunakan PHPM

Bagaimana untuk menyelesaikan ralat '[Vue warn]: prop diperlukan hilang'. Bagaimana untuk menyelesaikan ralat '[Vue warn]: prop diperlukan hilang'. Aug 26, 2023 pm 06:57 PM

Bagaimana untuk menyelesaikan ralat "[Vuewarn]:Missingrequiredprop" Semasa membangunkan aplikasi Vue, anda kadangkala menghadapi mesej ralat biasa: "[Vuewarn]:Missingrequiredprop". Ralat ini biasanya merujuk kepada kekurangan nilai sifat yang diperlukan dalam komponen, menyebabkan komponen gagal untuk dipaparkan dengan betul. Penyelesaian kepada masalah ini adalah mudah. ​​Kita boleh mengelakkan dan menangani kesilapan ini melalui beberapa kemahiran dan peraturan. Berikut adalah beberapa penyelesaian

Penjelasan terperinci tentang ralat Oracle 3114: Cara menyelesaikannya dengan cepat Penjelasan terperinci tentang ralat Oracle 3114: Cara menyelesaikannya dengan cepat Mar 08, 2024 pm 02:42 PM

Penjelasan terperinci tentang ralat Oracle 3114: Bagaimana untuk menyelesaikannya dengan cepat, contoh kod khusus diperlukan Semasa pembangunan dan pengurusan pangkalan data Oracle, kami sering menghadapi pelbagai ralat, antaranya ralat 3114 adalah masalah yang agak biasa. Ralat 3114 biasanya menunjukkan masalah dengan sambungan pangkalan data, yang mungkin disebabkan oleh kegagalan rangkaian, pemberhentian perkhidmatan pangkalan data atau tetapan rentetan sambungan yang salah. Artikel ini akan menerangkan secara terperinci punca ralat 3114 dan cara menyelesaikan masalah ini dengan cepat, dan melampirkan kod tertentu

Ralat Java: Ralat Penghuraian XML, Cara Membetulkan dan Mengelak Ralat Java: Ralat Penghuraian XML, Cara Membetulkan dan Mengelak Jun 24, 2023 pm 05:46 PM

Memandangkan Java semakin digunakan secara meluas dalam medan Internet, banyak pembangun mungkin menghadapi masalah "ralat penghuraian XML" apabila menggunakan XML untuk penghuraian data. Ralat penghuraian XML bermakna apabila menggunakan Java untuk menghuraikan data XML, atur cara tidak boleh menghuraikan data secara normal disebabkan oleh format data yang salah, teg tidak ditutup atau sebab lain, sekali gus menyebabkan ralat dan pengecualian. Jadi, bagaimanakah kita harus menyelesaikan dan mengelak apabila menghadapi ralat penghuraian XML? Artikel ini akan menerangkan isu ini secara terperinci. 1. Penghuraian XML

Panduan untuk memasang dan menyelesaikan ralat biasa dalam perpustakaan Scipy Panduan untuk memasang dan menyelesaikan ralat biasa dalam perpustakaan Scipy Feb 18, 2024 am 10:53 AM

Panduan pemasangan perpustakaan Scipy dan penyelesaian ralat biasa Pengenalan: Scipy ialah perpustakaan sumber terbuka untuk pengkomputeran saintifik Python, menyediakan pelbagai fungsi pengkomputeran matematik, saintifik dan kejuruteraan. Ia dibina berdasarkan perpustakaan NumPy dan boleh mengendalikan beberapa masalah pengiraan berangka yang kompleks. Artikel ini akan memperkenalkan panduan pemasangan Scipy dan menyediakan penyelesaian kepada beberapa ralat biasa, bersama-sama dengan contoh kod khusus untuk membantu pembaca memahami dan menggunakan Scipy dengan lebih baik. 1. Panduan pemasangan perpustakaan Scipy untuk memasang Python dan pi

See all articles