KONSEP MULTITHREADING
JAVA
Java
merupakan salah satu bahasa yang telah mendukung pengembangan aplikasi
multithreading (banyak thread). thread dalam java dapat diilustrasikan oleh
gambar berikut:
Dalam membuat program thread dalam java terdapat 2 cara dalam melakukannya
, yaitu:
-
Yang pertama dengan cara meng-extends kelas thread , dan contoh programnya yaitu:
-
Yang kedua dengan cara meng-implements interface
Runnable dan berikut contoh programnya:
Prioritas Thread
Dalam Java kita dapat membuat
prioritas suatu thread relative terhadapat thread yang lain. Sehingga thread
yang mempunyai prioritas lebih tinggi mempunyai kesempatan lebih besar untuk
mengakses suatu sources Java Virtual Machine memilih thread yang runnable
dengan prioritas tertinggi. Semua thread java mempunyai prioritas dari 1 sampai
10. Prioritas tertinggi 10 dan berakhir dengan 1 sebagai prioritas terendah.
Sedangkan prioritas normal adalah 5.
Thread.MIN_PRIORITY
= thread dengan prioritas terendah.
Thread.MAX_PRIORITY
= thread dengan prioritas tertinggi.
Thread.NORM_PRIORITY
= thread dengan prioritas normal.
Saat
thread baru dibuat ia mempunyai prioritas yang sama dengan thread
Yang
menciptakannya. Prioritas thread dapat diubah dengan menggunakan setpriority()
method
Berikut
contoh programnya:
Dan berikut
output programnya:
Sinkronisasi
sinkronisasi
adalah suatu proses pengendalian akses dari sumber daya terbagi pakai (shared
resource) oleh banyak thread sedemikian sehingga hanya satu thread yang dapat
mengakses sumber daya tertentu pada satu waktu.
Dalam aplikasi
multithreaded yang tidak tersinkronisasi, sangat mungkin terjadi adanya satu
thread memodifikasi suatu obyek yang dipakai bersama pada saat thread lain
sedangkan dalam proses menggunakan atau mengupdate nilai obyek tersebut.
Sinkronisasi mencegah jenis kerusakan data demikian, jika tidak disinkronkan
maka dapat mengakibatkan pembacaan yang buruk dan error yang signifikan. Secara
umum bagian kritis (critical sections) dari kode biasanya ditandai dengan kata
kunci synchronized.
Jadi
sinkronisasi itu ialah suatu proses pengendalian untuk salah satu thread dari
banyak thread untuk dapat mengakses sumber daya tertentu pada satu waktu.
Terdapat
2 (dua) bagian kode yang dapat
dikenakan
sinkronisasi di dalam Java:
•
synchronized method
Synchronized statement sama dengan synchronized method.
Synchronized statement hanya dapat dieksekusi setelah suatu thread memperoleh
lock terhadap obyek atau kelas yang dirujuk dalam pernyataan tersinkronisasi (synchronized statement).
•
synchronized block
Komunikasi Antar Thread
Dalam melakukan synchronized method & block kita
melakukan komunikasi antar thread .
Terdapat macam-macam method dalam komunikasi antar
thread, yaitu:
• - Method wait() menyebabkan thread terakhir
yang mengakses obyek melepaskan kunci obyek dan menunggu sampai thread lain
yang mengambil kunci obyek tersebut melepaskannya kembali ke obyek.
•
Terdapat 2 jenis method wait(), yaitu :
a. wait()menunggu sampai waktu tak berhingga sampai ada
thread yang menyerahkan kunci obyek kepada obyek bersangkutan.
b. wait ( long timeout )
menunggu sampai timeout milidetik.
• - Method notify()
akan menyebabkan thread
pemegang kunci obyek melepaskan kunci obyek dan obyek pemilik kunci memilih
salah satu thread pada state BLOCKED in object’s wait pool untuk
diubah state-nya ke BLOCKED in object’s lock pool.
• - Method notifyAll()
akan menyebabkan thread
pemegang kunci obyek melepaskan kunci obyek dan obyek pemilik kunci memindahkan
semua thread yang berada pada state BLOCK in object’s wait
pool ke state BLOCKED in object’s lock pool.
• - suspend()
Method suspend()
berbeda dengan stop(). Method ini mengambil thread tertentu dan
menyebabkannya berhenti tanpa
menghancurkan thread di bawahnya atau keadaan thread
yang
berjalan sebelumnya. Jika suatu thread di-suspend, panggil method
resume() padathread yang
sama untuk menjalankannya lagi.
• -resume()
Method ini
digunakan untuk menghidupkan method yang di-suspend. Tidak ada jaminan bahwa thread yang dijalankan
kembali akan berjalan dengan baik karena mungkin sudah ada thread dengan
prioritas lebih tinggi yang berjalan. Tetapi, resume() memungkinkan thread untuk berjalan kembali.
• -stop()
Method ini
menyebabkan thread segera berhenti. Ini sering dijadikan cara tercepat
untuk
mengakhiri suatu thread khususnya
jika method ini dieksekusi pada thread yang berlaku. Pada kasus ini, baris program setelah
pemanggilan method stop() tidak pernah dieksekusi karena konteks jalinan musnah sebelum
stop() selesai.
Tidak ada komentar:
Posting Komentar