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.
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 .
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.
Atau menurut prinsip lain: karena jumlah orang di kelompok bawah lebih banyak, kami akan mengganti dua anak perempuan dengan satu anak laki-laki.
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
Stream
dan 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
main
dan 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-
daemon
thread 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
Thread
di 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 {
private String[] names;
PeopleQueue(String... names) {
this.names = names;
}
@Override
public void run() {
for (int i = 0; i < names.length; i++) {
System.out.println("Обработаны documentы: " + names[i]);
try {
sleep(500);
} 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
queue1
pada
queue2
gilirannya 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.
GO TO FULL VERSION