Home > Pemrograman Java, Sistem Operasi, Sistem Terdistribusi > Multithreading di Java (1)

Multithreading di Java (1)


Java adalah salah satu bahasa pertama yang menyediakan multithreading dan memudahkan pengembang membangun program dengan banyak thread. Java mempunyai kemampuan multihtreading dari sejak awalnya. Karena itu, pengembang Java telah sering menemui masalah yang akan diuraikan. Itulah alasan mengapa tulisan ini disampaikan. Sebagai catatan buat kami dan semua pengembang Java yang ingin memperoleh keuntungan dari fitur penting tersebut.

1. Pendahuluan
Dahulu komputer hanya mempunyai satu CPU tunggal, dan hanya mampu mengeksekusi satu program pada satu waktu. Kemudian datang multitasking yang berarti bahwa komputer dapat mengeksekusi banyak program (disebut juga task atau proses) pada waktu yang sama. Sebenarnya tidak benar-benar “pada waktu yang sama”. Satu CPU tersebut digilir (share) antar beberapa program. Sistem operasi mengatur giliran berjalannya program, mengeksekusi setiap program tersebut selama waktu yang sangat singkat sebelum pindah giliran.

Bersama dengan multitasking hadir tantangan baru bagi pengembang perangkat lunak. Suatu program tidak dapat lagi menguasai semua waktu CPU yang tersedia, tidak juga terhadap memory atau sumber daya komputer yang lain. Program “yang baik” akan melepas semua sumber daya yang sudah tidak digunakannya, sehingga dapat digunakan oleh program-program lain.

Kemudian datang multithreading yang berarti bahwa kita dapat mempunyai banyak thread eksekusi di dalam program yang sama. Suatu thread eksekusi dapat dipikirkan sebagai sebuah CPU yang mengeksekusi program. Ketika kita mempunyai banyak thread yang mengeksekusi program yang sama, seolah-olah kita mempunyai banyak CPU yang mengeksekusi program tersebut.

Mulithreading lebih menantang daripada multitasking. Beberapa thread berjalan di dalam program yang sama dan karena itu dapat membaca dan menulis memory yang sama secara simultan. Ini dapat mengakibatkan error tidak terlihat di dalam program singlethreaded. Beberapa error ini dapat tidak terlihat pada mesin CPU tunggal, karena dua thread tidak pernah benar-benar dieksekusi secara simultan. Komputer modern, datang dengan CPU multi-core. Ini berarti bahwa thread-thread terpisah dapat dieksekusi oleh core terpisah secara simultan.

Jika suatu thread membaca suatu lokasi memory selama suatu thread lain menulis ke lokasi tersebut, nilai apa yang akan diperoleh thread pertama di akhir pembacaannya? Nilai yang lamakah? Nilai yang ditulis oleh thread keduakah? Atau nilai yang merupakan kombinasi keduanya? Atau jika dua thread menulis ke lokasi memory yang sama secara simultan, nilai apa yang akan ada di sana setelah selesai menulis? Nilai yang ditulis oleh thread pertamakah? Nilai yang ditulis oleh thread keduakah? Atau gabungan keduanya? Tanpa tindakan pencegahan yang tepat apapun mungkin terjadi, tidak dapat dipastikan. Hasil dapat berubah dari waktu ke waktu.

Multithreading dan Concurrency dalam Java

Tulisan ini akan fokus pada pemanfaatan multithreading di Java, namun beberapa masalah yang terjadi dalam multithreading serupa dengan masalah yang terjadi dalam multitasking dan sistem terdistribusi. Referensi bagi multitasking dan sistem terdistribusi dapat dijadikan juga sebagai acuan mempelajari multithreading. Karena itu pula, kata “concurency” lebih banyak digunakan daripada “multithreading”.

Di bawah ini adalah poin-poin penting yang akan dijelaskan dalam tulisan yang terdiri dari 21 artikel bersambung:
1. Pendahuluan – halaman ini
2. Keuntungan
3. Biaya
4. Pembuatan dan Memulai Thread
5. Race Conditions dan Critical Sections
6. Thread Safety dan Shared Resources
7. Thread Safety dan Immutability
8. Synchronized Blocks
9. Thread Signaling
10. Deadlock
11. Pencegahan Deadlock
12. Starvation dan Fairness
13. Nested Monitor Lockout
14. Slipped Conditions
15. Locks
16. Read / Write Locks
17. Reentrance Lockout
18. Semaphores
19. Blocking Queues
20. Thread Pools
21. Anatomi dari Synchronizer

  1. TiveDiodeds
    26 December 2009 at 8:26 pm

    Hi Guys,
    Just stumbled upon this site. It looks cool and I think I will be having a good time over here.

    Welcome me🙂

  2. Lealaygiele
    29 December 2009 at 7:23 pm

    Hello guys,
    Wondering whats up?

    Nothing to say right now😀

  3. creacer_east
    30 March 2010 at 7:53 am

    waaa….panjangnye…apa perbezaan diantara multithreading dgn multitasking?

  4. 14 June 2010 at 9:58 am

    mantabs…

  1. 17 May 2010 at 5:35 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: