JavaRush /Blog Java /Random-MS /Multithreading di Jawa

Multithreading di Jawa

Diterbitkan dalam kumpulan

pengenalan

Sebelum mempelajari tentang utas Java, mari kita lihat dalam masa terdekat. Bayangkan anda menghantar resume anda dan menjalani temu duga. Anda dan beberapa dozen rakan sekerja masa depan telah dijemput untuk bekerja di sebuah syarikat Perisian yang besar. Antara kerumitan lain, anda perlu menyerahkan dokumen kertas untuk pekerjaan kepada pekerja HR yang letih.
Multithreading dalam Java - 1
Untuk mempercepatkan proses, pemohon jawatan boleh dibahagikan kepada dua kumpulan dan diagihkan antara dua pengurus HR (jika ada dalam syarikat). Akibatnya, kami mempercepatkan proses kerana kerja reka bentuk selari .
Multithreading dalam Java - 2
Jika hanya ada seorang pegawai kakitangan dalam syarikat itu, entah bagaimana anda perlu keluar. Sebagai contoh, anda sekali lagi boleh membahagikan semua orang kepada dua kumpulan, contohnya, temu bual perempuan dan lelaki secara bergilir-gilir.
Multithreading dalam Java - 3
Atau mengikut prinsip lain: kerana terdapat lebih ramai orang dalam kumpulan yang lebih rendah, kami akan menukar dua perempuan untuk seorang lelaki.
Multithreading dalam Java - 4
Cara mengatur kerja ini dipanggil berbilang benang . Pegawai HR kami yang letih bertukar kepada kumpulan yang berbeza untuk mengambil pekerja seterusnya daripada mereka. Mungkin terdapat sebelas kumpulan, dan empat pegawai kakitangan. Dalam kes ini, pemprosesan multithreading akan berlaku secara selari oleh beberapa HR, yang boleh mengambil orang seterusnya daripada mana-mana kumpulan untuk memproses dokumennya.

Proses

Proses ( proses ) dalam kes ini akan menjadi organisasi kerja penerimaan dokumen. Dalam organisasi, beberapa proses boleh dibezakan: perakaunan, pembangunan perisian, mesyuarat dengan pelanggan, operasi gudang, dll. Sumber diperuntukkan untuk setiap proses: premis, pekerja untuk pelaksanaannya. Proses tersebut diasingkan antara satu sama lain: Pegawai HR tidak mempunyai akses kepada pangkalan data perakaunan, dan pengurus perkhidmatan pelanggan tidak berjalan di sekitar gudang. Jika sesuatu proses perlu mendapatkan akses kepada sumber orang lain, adalah perlu untuk mewujudkan komunikasi antara proses: memo, mesyuarat bersama.

Aliran

Kerja dalam proses disusun ke dalam benang ( java thread). Bagi jabatan HR, aliran ialah organisasi kerja untuk berkhidmat kepada kumpulan. Dalam gambar pertama terdapat satu aliran, dalam tiga seterusnya terdapat dua. Dalam proses itu, urutan boleh dilaksanakan secara selari - dua pegawai HR menerima dua atau lebih kumpulan pekerja masa depan. Interaksi pegawai kakitangan dengan kumpulan - pemprosesan benang dalam proses - dipanggil penyegerakan benang . Lukisan reka bentuk dua kumpulan oleh seorang pegawai kakitangan menunjukkan kaedah: seragam (perempuan - lelaki - perempuan - lelaki) dan dengan keutamaan yang berbeza (dua perempuan bergantian dengan seorang lelaki). Benang mempunyai akses kepada sumber proses yang menjadi miliknya: kumpulan kepada pegawai HR diberikan contoh borang permohonan, pen untuk mengisi dokumen. Tetapi jika aliran berinteraksi dengan perkara biasa kepada mereka, maka insiden mungkin berlaku. Jika pegawai kakitangan meminta anda menjerit nama orang terakhir dalam barisan, maka, dalam kes dua kumpulan, dia tidak pasti terlebih dahulu sama ada dia akan mendengar nama wanita atau lelaki. Konflik akses data sedemikian, penyekatan dan cara untuk menyelesaikannya adalah topik yang sangat penting.

Keadaan aliran

Setiap utas berada dalam salah satu daripada keadaan berikut:
  • Dicipta ( New) - talian untuk pegawai HR sedang bersiap, orang semakin teratur.
  • Dilancarkan ( Runnable) – barisan kami telah beratur untuk pegawai HR dan sedang diproses.
  • Disekat ( Blocked) – lelaki muda terakhir dalam barisan cuba menjerit nama, tetapi apabila dia mendengar bahawa gadis dalam kumpulan seterusnya mula melakukan ini di hadapannya, dia terdiam.
  • Selesai ( Terminated) - keseluruhan giliran telah disiapkan oleh pegawai HR dan tidak perlu lagi.
  • Menunggu ( Waiting) – satu baris gilir sedang menunggu isyarat daripada yang lain.
Organisasi benang dan interaksinya adalah asas untuk operasi proses yang berkesan.

Mari kembali ke dunia IT

Pada abad ke-21, pelaksanaan berbilang benang dan selari telah menjadi relevan. Sejak 90-an abad yang lalu, sistem pengendalian berbilang tugas Windows, MacOS dan Linux telah menjadi kukuh pada komputer rumah. Anda selalunya boleh menemui empat atau lebih pemproses teras di dalamnya. Bilangan blok selari kad video GPU telah melebihi seribu. Program popular ditulis dengan mengambil kira multithreading (multithreading), contohnya, versi moden perisian untuk memproses grafik, video, atau beroperasi dengan sejumlah besar data: Adobe Photoshop, WinRar, Mathematica, permainan moden. Java multithreading adalah topik yang sangat penting, popular dan kompleks. Oleh itu, dalam kursus JavaRush terdapat banyak tugas untuk memahaminya dengan baik. Contoh Java pada multithreading akan membantu anda menguasai nuansa asas dan kehalusan kawasan ini, menyegerakkan kerja benang.

Proses

Proses ialah contoh larian program yang Sistem Pengendalian (OS) telah memperuntukkan memori, masa/teras pemproses dan sumber lain. Adalah penting bahawa memori diperuntukkan secara berasingan; ruang alamat proses yang berbeza tidak boleh diakses antara satu sama lain. Jika proses perlu berkomunikasi, mereka boleh berbuat demikian menggunakan fail, paip dan kaedah komunikasi antara proses yang lain.

Aliran

Java Thread(strim). Kadangkala, untuk mengelakkan kekeliruan dengan kelas Java lain Streamdan seumpamanya, benang Java sering diterjemahkan sebagai utas. Mereka menggunakan sumber yang diperuntukkan kepada proses dan merupakan cara proses itu dilaksanakan. Benang utama melaksanakan kaedah maindan keluar. Apabila proses dilaksanakan, benang tambahan (benang kanak-kanak) boleh dihasilkan. Benang proses yang sama boleh bertukar-tukar data antara satu sama lain. Java multithreading memerlukan penyegerakan data untuk diambil kira, jangan lupa tentangnya. Di Java, proses ditamatkan apabila utas terakhirnya telah selesai. Untuk tugasan latar belakang, utas boleh dimulakan sebagai daemon ( daemon), perbezaan daripada yang biasa ialah ia akan ditamatkan secara paksa apabila semua bukan daemonutas proses ditamatkan.

Aplikasi berbilang benang pertama

Terdapat lebih daripada setengah dozen cara untuk mencipta benang; dalam kursus JavaRush kami akan memeriksanya secara terperinci. Pertama, mari kita berkenalan dengan salah satu yang asas. Terdapat kelas khas Threaddalam kaedah run()yang anda perlukan untuk menulis kod yang melaksanakan logik program. Selepas mencipta utas, anda boleh memulakannya dengan memanggil start(). Mari tulis program demo yang melaksanakan contoh multithreading Java.
class PeopleQueue extends Thread    {// Наша очередь из сотрудников, наследник класса Thread
    private String[] names;

    PeopleQueue(String... names) {// Конструктор, аргумент- массив имен сотрудников
        this.names = names;
    }

    @Override
    public void run() { // Этот метод будет вызван при старте потока
        for (int i = 0; i < names.length; i++) { // Вывод в цикле с паузой 0.5 сек очередного сотрудника
            System.out.println("Обработаны documentы: " + names[i]);
            try {
                sleep(500); // Задержка в 0.5 сек
            } catch (Exception e) {}
        }
    }
}

public class HR    {// Класс для демонстрации работы потока
    public static void main(String[] args) {
        // Создаем две очереди
        PeopleQueue queue1 = new PeopleQueue("Ivan","Сергей","Николай","Фердинанд","Basil");
        PeopleQueue queue2 = new PeopleQueue("Мария","Людмила","Алиса","Карина","Olga");

        System.out.println("Начали!"); // Сообщение из главного потока программы
        queue1.start();    //Запускаем одну очередь (дочерний поток)
        queue2.start(); //Запускаем вторую (дочерний поток)
    }
}
Jom lancarkan program. Konsol memaparkan output mesej daripada utas utama. Seterusnya, setiap urutan kanak-kanak queue1seterusnya queue2mengeluarkan mesej kepada konsol biasa mereka tentang pekerja yang diproses seterusnya. Salah satu pilihan yang mungkin untuk program ini:
Начали!
Обработаны documentы: Мария
Обработаны documentы: Ivan
Обработаны documentы: Людмила
Обработаны documentы: Сергей
Обработаны documentы: Алиса
Обработаны documentы: Николай
Обработаны documentы: Карина
Обработаны documentы: Фердинанд
Обработаны documentы: Ольга
Обработаны documentы: Васorй

Process finished with exit code 0
Multithreading di Jawa adalah topik yang kompleks dan pelbagai rupa. Keupayaan untuk menulis kod menggunakan pengkomputeran selari, berbilang tugas dan berbilang benang akan membantu anda melaksanakan tugas dengan berkesan pada pemproses dan kelompok berbilang teras moden yang terdiri daripada banyak komputer.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION