Rumah Java javaTutorial Penerangan terperinci tentang lima keadaan benang Java dan ciri serta prestasinya dalam persekitaran berbilang benang

Penerangan terperinci tentang lima keadaan benang Java dan ciri serta prestasinya dalam persekitaran berbilang benang

Feb 18, 2024 pm 07:07 PM
multithreading Ciri-ciri negeri benang java Prestasi

. meningkatkan keselarasan dan responsif Program. Di Java, benang mempunyai lima keadaan berbeza, iaitu keadaan baharu (Baru), keadaan boleh dijalankan (boleh dijalankan), keadaan disekat (disekat), keadaan menunggu (menunggu) dan keadaan penamatan (ditamatkan). Artikel ini akan memperkenalkan ciri lima keadaan ini secara terperinci, dan menunjukkan prestasi dalam persekitaran berbilang benang melalui contoh kod tertentu.

Penerangan terperinci tentang lima keadaan benang Java dan ciri serta prestasinya dalam persekitaran berbilang benang1. Keadaan baharu (Baru)

Keadaan di mana benang telah dibuat tetapi belum mula berjalan dipanggil keadaan baharu. Dalam keadaan yang baru dibuat, kaedah mula () benang belum lagi dipanggil, jadi pelaksanaan sebenarnya belum dimulakan. Pada masa ini, objek benang telah dibuat, tetapi sistem pengendalian tidak memperuntukkan sumber pelaksanaan kepadanya.

2. Keadaan boleh dijalankan (Boleh Dijalankan)

Selepas benang dipanggil dengan kaedah mula(), ia memasuki keadaan boleh dijalankan. Benang dalam keadaan ini menggunakan CPU untuk melaksanakan tugasnya, tetapi mungkin digantung disebabkan oleh utas keutamaan tinggi yang lain, kehabisan potongan masa atau menunggu input/output. Dalam keadaan boleh jalan, benang mempunyai ciri-ciri berikut:


Benang dalam keadaan ini ialah unit asas penjadualan sistem pengendalian.

Berbilang utas dilaksanakan secara serentak, dan kepingan masa CPU diperuntukkan kepada setiap utas supaya ia dilaksanakan secara bergilir-gilir.

Penjadualan benang tidak boleh dikawal kerana ia ditentukan oleh sistem pengendalian.
  1. Berikut ialah contoh kod ringkas yang menunjukkan keadaan boleh jalan bagi dua utas:
  2. class MyRunnable implements Runnable{
        public void run(){
            for(int i=0; i<10; i++){
                System.out.println(Thread.currentThread().getName() + ": " + i);
            }
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Thread t1 = new Thread(new MyRunnable());
            Thread t2 = new Thread(new MyRunnable());
            
            t1.start();
            t2.start();
        }
    }
    Salin selepas log masuk
  3. Dalam contoh di atas, kami mencipta dua utas t1 dan t2 dan memulakannya serentak. Oleh kerana kedua-dua utas berjalan serentak, outputnya akan silih berganti.
  4. 3. Keadaan disekat (Disekat)
Benang memasuki keadaan disekat kerana ia tidak dapat memperoleh sumber tertentu atau sedang menunggu syarat tertentu untuk dipenuhi. Benang dalam keadaan disekat tidak akan menggunakan masa CPU sehingga ia memperoleh sumber atau memasuki keadaan boleh jalan apabila syarat dipenuhi.

Berikut ialah contoh kod ringkas yang menunjukkan keadaan menyekat benang:

public class Main {
    public static void main(String[] args) {
        Object lock = new Object();
        
        Thread t1 = new Thread(() -> {
            synchronized (lock) {
                try {
                    System.out.println("Thread 1 is waiting");
                    lock.wait();
                    System.out.println("Thread 1 is running again");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        Thread t2 = new Thread(() -> {
            try {
                Thread.sleep(2000);
                
                synchronized (lock) {
                    System.out.println("Thread 2 is waking up Thread 1");
                    lock.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        t1.start();
        t2.start();
    }
}
Salin selepas log masuk

Dalam contoh di atas, kami mencipta dua utas t1 dan t2, t1 memasuki menunggu dengan memanggil kaedah wait() semasa keadaan pelaksanaan sehingga t2 membangunkannya melalui kaedah notify(). Sebab t1 disekat di sini ialah ia tidak boleh meneruskan pelaksanaan sehingga t2 mengeluarkan pemberitahuan. Apabila t2 menghantar pemberitahuan, t1 menyahsekat dan memasuki semula keadaan boleh jalan.


4. Keadaan menunggu (Menunggu)

Sesuatu benang memasuki keadaan menunggu kerana ia perlu menunggu urutan lain untuk mengambil beberapa tindakan tertentu. Urutan dalam keadaan menunggu menunggu sehingga ia dimaklumkan atau terganggu.

Berikut ialah contoh kod ringkas yang menunjukkan keadaan menunggu sesuatu benang:

public class Main {
    public static void main(String[] args) {
        Object lock = new Object();
        
        Thread t1 = new Thread(() -> {
            synchronized (lock) {
                System.out.println("Thread 1 is waiting");
                try {
                    lock.wait(); // 进入等待状态
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                System.out.println("Thread 1 is running again");
            }
        });

        Thread t2 = new Thread(() -> {
            try {
                Thread.sleep(2000);
                
                synchronized (lock) {
                    System.out.println("Thread 2 is waking up Thread 1");
                    lock.notify(); // 唤醒等待的线程
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        t1.start();
        t2.start();
    }
}
Salin selepas log masuk

Dalam contoh di atas, kami meletakkan benang t1 ke dalam keadaan menunggu melalui kaedah lock.wait() sehingga benang t2 melepasi kunci.notify ( ) kaedah untuk memberitahunya.


5. Keadaan ditamatkan (Ditamatkan)

Apabila benang menyelesaikan tugasnya atau keluar kerana pengecualian, ia memasuki keadaan ditamatkan. Urutan dalam keadaan ditamatkan tidak lagi dilaksanakan dan tidak boleh dimulakan semula.

Berikut ialah contoh kod ringkas yang menunjukkan status penamatan urutan:

public class Main {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for(int i=0; i<10; i++){
                System.out.println(Thread.currentThread().getName() + ": " + i);
            }
        });
        
        t1.start();
        
        try {
            t1.join(); // 确保线程执行完
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("Thread 1 is terminated");
    }
}
Salin selepas log masuk
Dalam contoh di atas, kami mencipta utas t1 dan memulakannya. Kemudian gunakan kaedah t1.join() untuk memastikan bahawa benang terus melaksanakan kod berikutnya selepas ia selesai melaksanakan.


Ringkasnya, artikel ini memperkenalkan lima keadaan benang Java dan ciri serta prestasinya dalam persekitaran berbilang benang. Untuk pengaturcaraan berbilang benang, adalah penting untuk memahami peralihan dan ciri keadaan benang Menggunakan keadaan benang yang sesuai boleh menjadikan program lebih cekap dan boleh dipercayai. Saya berharap melalui pengenalan artikel ini, pembaca dapat lebih memahami mekanisme kerja benang Java dan menggunakan pengaturcaraan berbilang benang dengan betul dalam projek sebenar.

Atas ialah kandungan terperinci Penerangan terperinci tentang lima keadaan benang Java dan ciri serta prestasinya dalam persekitaran berbilang 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Pengecualian fungsi C++ dan multithreading: pengendalian ralat dalam persekitaran serentak Pengecualian fungsi C++ dan multithreading: pengendalian ralat dalam persekitaran serentak May 04, 2024 pm 04:42 PM

Pengendalian pengecualian fungsi dalam C++ amat penting untuk persekitaran berbilang benang untuk memastikan keselamatan benang dan integriti data. Pernyataan cuba-tangkap membolehkan anda menangkap dan mengendalikan jenis pengecualian tertentu apabila ia berlaku untuk mengelakkan ranap program atau rasuah data.

Bagaimana untuk melaksanakan multi-threading dalam PHP? Bagaimana untuk melaksanakan multi-threading dalam PHP? May 06, 2024 pm 09:54 PM

PHP multithreading merujuk kepada menjalankan berbilang tugas secara serentak dalam satu proses, yang dicapai dengan mencipta benang berjalan secara bebas. Anda boleh menggunakan sambungan Pthreads dalam PHP untuk mensimulasikan tingkah laku berbilang benang Selepas pemasangan, anda boleh menggunakan kelas Thread untuk mencipta dan memulakan utas. Contohnya, apabila memproses sejumlah besar data, data boleh dibahagikan kepada berbilang blok dan bilangan benang yang sepadan boleh dibuat untuk memprosesnya secara serentak untuk meningkatkan kecekapan.

Penggunaan rangka kerja ujian unit JUnit dalam persekitaran berbilang benang Penggunaan rangka kerja ujian unit JUnit dalam persekitaran berbilang benang Apr 18, 2024 pm 03:12 PM

Terdapat dua pendekatan biasa apabila menggunakan JUnit dalam persekitaran berbilang benang: ujian berbenang tunggal dan ujian berbilang benang. Ujian berutas tunggal dijalankan pada utas utama untuk mengelakkan isu konkurensi, manakala ujian berbilang utas dijalankan pada utas pekerja dan memerlukan pendekatan ujian disegerakkan untuk memastikan sumber yang dikongsi tidak terganggu. Kes penggunaan biasa termasuk menguji kaedah selamat berbilang benang, seperti menggunakan ConcurrentHashMap untuk menyimpan pasangan nilai kunci, dan utas serentak untuk beroperasi pada pasangan nilai kunci dan mengesahkan ketepatannya, mencerminkan aplikasi JUnit dalam persekitaran berbilang benang. .

Bagaimanakah concurrency dan multithreading fungsi Java boleh meningkatkan prestasi? Bagaimanakah concurrency dan multithreading fungsi Java boleh meningkatkan prestasi? Apr 26, 2024 pm 04:15 PM

Teknik concurrency dan multithreading menggunakan fungsi Java boleh meningkatkan prestasi aplikasi, termasuk langkah berikut: Memahami konsep concurrency dan multithreading. Manfaatkan pustaka konkurensi dan berbilang benang Java seperti ExecutorService dan Callable. Amalkan kes seperti pendaraban matriks berbilang benang untuk memendekkan masa pelaksanaan. Nikmati kelebihan peningkatan kelajuan tindak balas aplikasi dan kecekapan pemprosesan yang dioptimumkan yang dibawa oleh concurrency dan multi-threading.

Bagaimanakah fungsi PHP berkelakuan dalam persekitaran berbilang benang? Bagaimanakah fungsi PHP berkelakuan dalam persekitaran berbilang benang? Apr 16, 2024 am 10:48 AM

Dalam persekitaran berbilang benang, gelagat fungsi PHP bergantung pada jenisnya: Fungsi biasa: thread-safe, boleh dilaksanakan secara serentak. Fungsi yang mengubah suai pembolehubah global: tidak selamat, perlu menggunakan mekanisme penyegerakan. Fungsi operasi fail: tidak selamat, perlu menggunakan mekanisme penyegerakan untuk menyelaraskan akses. Fungsi operasi pangkalan data: Mekanisme sistem pangkalan data yang tidak selamat perlu digunakan untuk mengelakkan konflik.

Bagaimana untuk menangani sumber yang dikongsi dalam multi-threading dalam C++? Bagaimana untuk menangani sumber yang dikongsi dalam multi-threading dalam C++? Jun 03, 2024 am 10:28 AM

Mutex digunakan dalam C++ untuk mengendalikan sumber perkongsian berbilang benang: buat mutex melalui std::mutex. Gunakan mtx.lock() untuk mendapatkan mutex dan menyediakan akses eksklusif kepada sumber yang dikongsi. Gunakan mtx.unlock() untuk melepaskan mutex.

Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang? Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang? Jun 05, 2024 pm 01:08 PM

Dalam persekitaran berbilang benang, pengurusan memori C++ menghadapi cabaran berikut: perlumbaan data, kebuntuan dan kebocoran memori. Tindakan balas termasuk: 1. Menggunakan mekanisme penyegerakan, seperti mutex dan pembolehubah atom 2. Menggunakan struktur data tanpa kunci 3. Menggunakan penunjuk pintar 4. (Pilihan) Melaksanakan pengumpulan sampah;

Cabaran dan strategi untuk menguji program berbilang benang dalam C++ Cabaran dan strategi untuk menguji program berbilang benang dalam C++ May 31, 2024 pm 06:34 PM

Pengujian program berbilang benang menghadapi cabaran seperti ketidakbolehulangan, ralat konkurensi, kebuntuan dan kekurangan keterlihatan. Strategi termasuk: Ujian unit: Tulis ujian unit untuk setiap utas untuk mengesahkan kelakuan utas. Simulasi berbilang benang: Gunakan rangka kerja simulasi untuk menguji program anda dengan kawalan ke atas penjadualan benang. Pengesanan perlumbaan data: Gunakan alat untuk mencari perlumbaan data yang berpotensi, seperti valgrind. Nyahpepijat: Gunakan penyahpepijat (seperti gdb) untuk memeriksa status program masa jalan dan mencari sumber perlumbaan data.

See all articles