Minggu, 30 November 2014

KONSEP MULTITHREADING JAVA


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