"Halo, Amigo! Kami memiliki topik baru dan sangat sulit. Maaf. Ini sering dianggap sebagai salah satu topik paling kompleks tidak hanya di Java, tetapi juga dalam pemrograman secara umum. Saya berbicara tentang multithreading . "

Bayangkan permainan komputer biasa, misalnya, permainan balap pesawat luar angkasa. Anda terbang melintasi bentangan kosmos, menghindari meteorit dan kapal penjelajah patroli. Dua lusin lainnya berpartisipasi dengan Anda dalam balapan ilegal ini.

Katakanlah Anda memutuskan untuk menulis permainan seperti itu. Program Anda harus melacak perintah (input keyboard), memindahkan pesawat ruang angkasa, menghitung lintasannya, menentukan konsekuensi dari setiap tabrakan, dan menggambar semua ini di layar pengguna. Ini adalah pekerjaan yang sangat kompleks.

Ingat bagaimana kita memecahkan «masalah yang sangat rumit» dalam contoh tentang perusahaan pelayaran yang berkembang?

Kami membaginya menjadi departemen-departemen independen dan secara kaku menentukan (terstandarisasi) bagaimana mereka dapat berinteraksi.

"Tapi apa yang kita lakukan ketika bagian independen harus melakukan beberapa pekerjaan secara paralel dengan bagian lain?! Jawaban atas pertanyaan ini adalah utas ."

Coba bayangkan sebuah program sebagai robot kecil yang menjalankan kode dan menjalankan perintah . Pertama, ia menjalankan perintah pada satu baris, lalu berpindah ke baris berikutnya, dan seterusnya.

"Aku bisa melihatnya dalam pikiranku. Sepotong kue!"

"Bagus sekali. Dan sekarang bayangkan Anda memiliki beberapa robot ini. Sementara yang satu menangani masukan pengguna, yang kedua memperbarui objek berdasarkan masukan itu. Yang ketiga mengeksekusi kode untuk menampilkan objek ini di layar. Beberapa kali dalam satu detik, yang keempat memeriksa apakah ada kapal yang bertabrakan dan, jika ada, menghitung hasil tabrakan."

Dengan demikian, kita tidak hanya dapat membagi program menjadi bagian/objek independen, tetapi juga membuatnya agar bagian-bagian ini dapat melakukan pekerjaannya secara independen satu sama lain. Semakin sedikit interaksi antara bagian-bagian individual, semakin tidak rumit programnya.

Bayangkan Anda dapat mengganti pengelola dengan skrip yang mengirim surat . Dan departemen perusahaan lainnya bahkan tidak dapat mengetahui bahwa telah terjadi perubahan. Hal semacam ini terjadi pada awal abad ke-26 dengan hasil yang luar biasa. Sebagian besar manajer, dan bahkan eksekutif puncak, dapat berhasil digantikan oleh naskah dengan kompleksitas rata-rata. Hanya setelah "persatuan plankton kantor" turun tangan, pemecatan massal para manajer berakhir. Tapi saya ngelantur.

"Sangat menarik!"

"Tidak hanya ada beberapa kode pelaksana "robot kecil" ini, mereka juga dapat berkomunikasi satu sama lain dan menelurkan robot baru."

"Memunculkan robot baru?"

"Ya, untuk melakukan tugas baru. Terkadang menguntungkan untuk membuat robot lain (utas lain) untuk melakukan beberapa tindakan pada saat yang sama dengan utas (robot) saat ini."

" Kedengarannya bagus, tapi saya tidak tahu di mana saya akan menggunakannya. "

Dan mengapa kami menyebutnya « utas »?

"Bayangkan bahwa setiap robot memiliki warna yang berbeda, dan menandai perintah dengan warnanya saat ia menjalankannya. Jalur yang diambil oleh robot kecil itu seperti garis yang ditinggalkan pensil. Jalur ini berjejer di belakang robot, seperti benang di belakang sebuah jarum."

Setiap «robot kecil» memiliki tugas yang harus dilakukannya. Anda dapat menganggap utas adalah kumpulan perintah yang dijalankan saat melakukan tugas ini.

Katakanlah Anda sedang terbang dengan pesawat ruang angkasa untuk mengirimkan kargo. Kemudian «mengirim kargo» adalah tugas Anda, dan Anda sedang mengerjakannya. Dan jalur penerbangan Anda adalah utas Anda. Bisa dibilang setiap tugas baru, setiap tugas yang belum selesai, memiliki utasnya sendiri (jalur yang masih perlu dilalui).

"Dengan kata lain, ada tugas dan "robot kecil" yang menjalankannya. Dan sebuah utas hanyalah jalur yang diambil oleh robot saat menyelesaikan tugasnya?"

"Tepat."

Begitulah cara semuanya bekerja jauh di dalam. Karena komputer hanya memiliki satu prosesor, ia hanya dapat menjalankan satu perintah dalam satu waktu. Jadi inilah yang terjadi: prosesor terus-menerus beralih di antara utas. Itu beralih ke utas baru, menjalankan beberapa perintah, lalu beralih ke utas berikutnya, menjalankan beberapa perintah, dan seterusnya. Tetapi karena peralihan antar utas terjadi ratusan kali per detik, tampaknya bagi kami semua utas berjalan secara bersamaan.

Multithreading - 1