Java Concurrency / Multithreading

Oleh : Reza Ervani

بسم الله الرحمن الرحيم

Dimasa lalu komputer hanya memiliki satu CPU, dan hanya mampu mengeksekusi satu program dalam satu waktu. Kemudian muncullah istilah multitasking dimana komputer dapat mengeksekusi banyak program (alias task atau proses) pada waktu yang sama. Meskipun sesungguhnya tidak dalam waktu yang benar-benar sama. CPU tunggal dibagi-bagi diantara program-program yang sedang berjalan. Sistem operasi menswitch antara program yang sedang berjalan, mengeksekusinya masing-masing sedikit sedikit sebelum kemudian berpindah ke program yang lain lalu kembali lagi.

Bersamaan dengan multitasking datanglah tantangan baru bagi para pengembang perangkat lunak. Program tidak lagi dapat dianggap memiliki ketersediaan seluruh waktu CPU, tidak pula seluruh memori pada komputer yang lain. Sebuah program yang baik harus melepaskan semua resource yang tidak lagi dia gunakan, sehingga program lain dapat menggunakannya.

Kemudian muncullah istilah multithreading yang berarti kita dapat memiliki banyak thread eksekusi di dalam program yang sama. Sebuah thread eksekusi dapat dianggap sebagaimana CPU mengeksekusi program. Saat kita memiliki banyak thread yang mengeksekusi program yang sama, itu sama seperti kita memiliki banyak CPU yang mengeksekusi di dalam program yang sama.

Multithreading bahkan lebih menantang daripada multitasking. Thread yang dieksekusi didalam program yang sama dan karenanya membaca dan menulis memoriyang sama secara simultan. Ini dapat menghasilkan error yang tidak ditemui dalam program single thread. Beberapa dari error ini mungkin tidak didapati dalam mesin dengan CPU tunggal, karena dua thread tidak pernah benar-benar dieksekusi secara “simultan”. Akan tetapi, komputer modern, memiliki CPU dengan multi core. Ini berarti thread terpisah dapat dieksekusi di core terpisah secara simultan.

Jika sebuah thread membaca lokasi memori sementara thread yang lain menulis ke sana, nilai apa yang akan dibaca thread pertama saat terakhir ? Nilai yang lama ? Atau nilai yang ditulis oleh thread yang kedua ? Atau nilai yang merupakan perpaduan antara keduanya ? Atau jika dua thread ditulis pada memori yang sama secara simultan, nilai apa yang akan tinggal saat mereka selesai ? Apakah nilai yang ditulis oleh thread yang pertama ? Atau nilai yang ditulis oleh thread yang kedua ? Atau perpaduan antara keduanya ? Tanpa prasyarat yang tepat, semua outcome itu dimungkinkan. Bahkan prilakunya tidak dapat ditebak. Outcome dapat saja berubah dari waktu ke waktu.

Multithreading dan Concurrency di Java

Java adalah bahasa pertama yang membuat multithreading menjadi mudah bagi pengembang. Java memiliki kemampuan multithreading dari awal. Karenannya, pengembang Java sering mendapatkan masalah seperti yang dipaparkan sebelumnya. Tutorial ini disusun utamanya berfokus pada multithreading di Java, tetapi beberapa masalah yang muncul dalam multithreading sama dengan masalah yang muncul di multitasking dan sistem terdistribusi, sehingga referensi untuk keduanya bisa saja muncul pula dalam tutorial ini.

Bersambung insya Allah (reza@rumahilmu.or.id)

About Reza Ervani 430 Articles
Adalah pendiri programming.rezaervani.com -

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.