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.
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 .
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.
Atau mengikut prinsip lain: kerana terdapat lebih ramai orang dalam kumpulan yang lebih rendah, kami akan menukar dua perempuan untuk seorang lelaki.
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
Stream
dan seumpamanya, benang Java sering diterjemahkan sebagai utas. Mereka menggunakan sumber yang diperuntukkan kepada proses dan merupakan cara proses itu dilaksanakan. Benang utama melaksanakan kaedah
main
dan 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
daemon
utas 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
Thread
dalam 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 {
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();
}
}
Jom lancarkan program. Konsol memaparkan output mesej daripada utas utama. Seterusnya, setiap urutan kanak-kanak
queue1
seterusnya
queue2
mengeluarkan 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.
GO TO FULL VERSION