JavaRush /Java Blog /Random-ID /Multithread di Jawa

Multithread di Jawa

Dipublikasikan di grup Random-ID

Perkenalan

Sebelum mempelajari thread Java, mari kita lihat ke masa depan. Bayangkan Anda mengirimkan resume Anda dan melakukan wawancara. Anda dan beberapa lusin kolega masa depan telah diundang untuk bekerja di sebuah perusahaan Perangkat Lunak besar. Di antara kerumitan lainnya, Anda perlu menyerahkan dokumen kertas untuk pekerjaan kepada karyawan HR yang lelah.
Multithreading di Java - 1
Untuk mempercepat proses, pelamar posisi tersebut dapat dibagi menjadi dua kelompok dan didistribusikan kepada dua manajer HR (jika ada di perusahaan). Hasilnya, kami mempercepat proses karena pekerjaan desain paralel .
Multithreading di Java - 2
Jika hanya ada satu petugas personalia di perusahaan, maka Anda harus keluar. Misalnya, Anda dapat membagi lagi setiap orang menjadi dua kelompok, misalnya mewawancarai anak perempuan dan anak laki-laki secara bergantian.
Multithreading di Java - 3
Atau menurut prinsip lain: karena jumlah orang di kelompok bawah lebih banyak, kami akan mengganti dua anak perempuan dengan satu anak laki-laki.
Multithreading di Java - 4
Cara mengatur pekerjaan ini disebut multi-utas . Petugas HR kami yang lelah beralih ke grup berbeda untuk merekrut karyawan berikutnya dari mereka. Mungkin ada sebelas kelompok, dan empat petugas personalia. Dalam hal ini, pemrosesan multithreading akan dilakukan secara paralel oleh beberapa HR, yang dapat mengambil orang berikutnya dari grup mana pun untuk memproses dokumennya.

Proses

Proses ( proses ) dalam hal ini adalah pengorganisasian pekerjaan penerimaan dokumen. Dalam sebuah organisasi, beberapa proses dapat dibedakan: akuntansi, pengembangan perangkat lunak, pertemuan dengan klien, operasi gudang, dll. Sumber daya dialokasikan untuk setiap proses: tempat, karyawan untuk pelaksanaannya. Prosesnya terisolasi satu sama lain: Petugas SDM tidak memiliki akses ke database akuntansi, dan manajer layanan pelanggan tidak berkeliaran di gudang. Jika suatu proses perlu mendapatkan akses ke sumber daya orang lain, maka perlu dibangun komunikasi antar-proses: memo, pertemuan bersama.

Aliran

Pekerjaan dalam suatu proses disusun menjadi thread ( java thread). Bagi departemen SDM, aliran adalah pengorganisasian kerja untuk melayani suatu kelompok. Di gambar pertama ada satu aliran, di tiga gambar berikutnya ada dua. Dalam prosesnya, thread dapat dijalankan secara paralel - dua petugas HR menerima dua atau lebih kelompok karyawan masa depan. Interaksi petugas personalia dengan kelompok - pemrosesan utas dalam suatu proses - disebut sinkronisasi utas . Gambar desain dua kelompok oleh satu petugas personalia menunjukkan metode: seragam (perempuan - laki-laki - perempuan - laki-laki) dan dengan prioritas berbeda (dua perempuan bergantian dengan satu laki-laki). Utas memiliki akses ke sumber daya proses di mana mereka berada: kelompok petugas SDM diberikan contoh formulir aplikasi, pena untuk mengisi dokumen. Namun jika arus berinteraksi dengan hal-hal yang umum terjadi, maka insiden dapat terjadi. Jika petugas personalia meminta Anda meneriakkan nama orang terakhir dalam antrian, maka dalam kasus dua kelompok, dia tidak yakin sebelumnya apakah dia akan mendengar nama perempuan atau laki-laki. Konflik akses data, pemblokiran dan cara mengatasinya adalah topik yang sangat penting.

Status aliran

Setiap thread berada dalam salah satu status berikut:
  • Dibuat ( New) – barisan petugas HR sudah siap, orang-orang mulai terorganisir.
  • Diluncurkan ( Runnable) – antrian kami sudah mengantri ke petugas HR dan sedang diproses.
  • Diblokir ( Blocked) – laki-laki terakhir dalam antrian mencoba meneriakkan nama, tapi ketika dia mendengar gadis di kelompok berikutnya mulai melakukannya sebelum dia, dia terdiam.
  • Selesai ( Terminated) - seluruh antrian telah diselesaikan oleh petugas HR dan tidak diperlukan lagi.
  • Waiting( Waiting) – satu antrian sedang menunggu sinyal dari antrian lainnya.
Pengorganisasian thread dan interaksinya adalah dasar untuk pengoperasian proses yang efektif.

Mari kita kembali ke dunia IT

Pada abad ke-21, eksekusi multi-thread dan paralel menjadi relevan. Sejak tahun 90-an abad terakhir, sistem operasi multitasking Windows, MacOS, dan Linux telah tertanam kuat di komputer rumahan. Anda sering dapat menemukan empat atau lebih prosesor inti di dalamnya. Jumlah blok paralel kartu video GPU telah melebihi seribu. Program populer ditulis dengan mempertimbangkan multithreading (multithreading), misalnya, perangkat lunak versi modern untuk memproses grafik, video, atau beroperasi dengan data dalam jumlah besar: Adobe Photoshop, WinRar, Mathematica, game modern. Multithreading Java adalah topik yang sangat penting, populer dan kompleks. Oleh karena itu, dalam kursus JavaRush ada banyak tugas untuk memahaminya dengan baik. Contoh Java tentang multithreading akan membantu Anda menguasai nuansa dasar dan seluk-beluk area ini, menyinkronkan pekerjaan thread.

Proses

Proses adalah contoh program yang berjalan di mana Sistem Operasi (OS) telah mengalokasikan memori, waktu/inti prosesor, dan sumber daya lainnya. Penting agar memori dialokasikan secara terpisah; ruang alamat dari proses yang berbeda tidak dapat diakses satu sama lain. Jika proses perlu berkomunikasi, mereka dapat melakukannya menggunakan file, pipa, dan metode komunikasi antarproses lainnya.

Mengalir

Jawa Thread(aliran). Terkadang, untuk menghindari kebingungan dengan kelas Java lain Streamdan sejenisnya, thread Java sering kali diterjemahkan sebagai thread. Mereka menggunakan sumber daya yang dialokasikan untuk suatu proses dan merupakan cara proses dijalankan. Utas utama menjalankan metode maindan keluar. Ketika suatu proses dijalankan, thread tambahan (thread anak) dapat dihasilkan. Thread dari proses yang sama dapat bertukar data satu sama lain. Multithreading Java memerlukan sinkronisasi data untuk diperhitungkan, jangan lupakan itu. Di Java, suatu proses berakhir ketika thread terakhirnya telah selesai. Untuk tugas latar belakang, sebuah thread dapat dimulai sebagai daemon ( daemon), perbedaannya dari daemon biasa adalah bahwa thread tersebut akan dihentikan secara paksa ketika semua non- daemonthread dari proses tersebut dihentikan.

Aplikasi multi-thread pertama

Ada lebih dari setengah lusin cara untuk membuat thread; dalam kursus JavaRush kita akan memeriksanya secara detail. Pertama, mari berkenalan dengan salah satu yang mendasar. Ada kelas khusus Threaddi mana run()Anda perlu menulis kode yang mengimplementasikan logika program. Setelah membuat thread, Anda dapat memulainya dengan memanggil start(). Mari kita menulis program demo yang mengimplementasikan 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(); //Запускаем вторую (дочерний поток)
    }
}
Mari kita luncurkan programnya. Konsol menampilkan output pesan dari thread utama. Selanjutnya, setiap thread anak queue1pada queue2gilirannya mengeluarkan pesan ke konsol umum mereka tentang karyawan yang diproses berikutnya. Salah satu opsi yang memungkinkan untuk program ini:
Начали!
Обработаны documentы: Мария
Обработаны documentы: Ivan
Обработаны documentы: Людмила
Обработаны documentы: Сергей
Обработаны documentы: Алиса
Обработаны documentы: Николай
Обработаны documentы: Карина
Обработаны documentы: Фердинанд
Обработаны documentы: Ольга
Обработаны documentы: Васorй

Process finished with exit code 0
Multithreading di Java adalah topik yang kompleks dan memiliki banyak segi. Kemampuan menulis kode menggunakan komputasi paralel, multitasking, dan multithread akan membantu Anda mengimplementasikan tugas secara efektif pada prosesor multi-core modern dan cluster yang terdiri dari banyak komputer.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION