0% menganggap dokumen ini bermanfaat (0 suara)
38 tayangan6 halaman

Memahami Multithreading dalam Java

Multithreading memungkinkan beberapa aliran kontrol berjalan secara bersamaan dalam satu program. Terdapat dua jenis thread, yaitu daemon thread yang hidupnya bergantung pada thread utama, dan user thread yang hidupnya independen. Sebuah thread memiliki siklus hidup dari newborn, runnable, running, blocked, hingga mati. Sinkronisasi diperlukan agar hanya satu thread yang mengakses sumber daya bersama pada satu waktu.

Diunggah oleh

Yuni Karina
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
38 tayangan6 halaman

Memahami Multithreading dalam Java

Multithreading memungkinkan beberapa aliran kontrol berjalan secara bersamaan dalam satu program. Terdapat dua jenis thread, yaitu daemon thread yang hidupnya bergantung pada thread utama, dan user thread yang hidupnya independen. Sebuah thread memiliki siklus hidup dari newborn, runnable, running, blocked, hingga mati. Sinkronisasi diperlukan agar hanya satu thread yang mengakses sumber daya bersama pada satu waktu.

Diunggah oleh

Yuni Karina
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd

MULTITHREADING Thread (lightweight process raut execution context) adalah sebuah singlesequential flow control di dalam program.

Secara sederhana, thread adalah sebuah sub program yang berjalan di dalam program. Sebuah thread mempunyai awal dan akhir. ulthithreading adalah program yang mempunyai beberapa flow of control yang berjalan secara konkuren atau pararel. Scheduler !" mendukung # a. preempti$e multithreading, suatu thread prioritas tinggi bisa menyeruak masuk dan menginterupsi thread yang sedang beraksi. b. non%preempti$e (cooperati$e) multithreading, thread yang sedang beraksi tidak dapat diinterupsi. &da dua macam thread dalam !a$a, yaitu # '. (aemon thread, merupakan thread yang siklus hidupnya tergantung pada thread utama. &pabila thread utama berakhir maka otomatis thread%thread daemon juga berakhir. ). *ser thread, apabila thread utama berakhir maka user thread akan terus dijalankan. Daur hidup thread : newborn thread diinstantiasi, sebuah ruangan di telah dialokasikan untuk thread ini dan telah menyelesaikan tahap inisialisasi. +ada state ini, timerThread belum masuk dalam skema penjadwalan. ,. Thread coba - new Thread ( ). ,. Runnable Sebuah thread berada dalam skema penjadwalan akan tetapi dia tidak sedang beraksi. ,.. [Link]() Running +ada state ini, thread sedang beraksi. !atah waktu beraksi ditentukan oleh thread scheduler. Thread yang berada dalam state ini dapat juga lengser secara sukarela, dan masuk kembali ke status runnable, sehingga thread lain yang sedang menunngu giliran memperoleh kesempatan untuk beraksi. Tindakan thread yang lengser secara sukarela disebut dengan yield%ing. public $oid run ( )/ , [Link](). ,. 0 Bloc ed +ada tahap ini thread sedang tidak beraksi dan diabaikan dalam penjadwalan. Suatu thread terblok jika # a. Thread itu tidur untuk jangka waktu tertentu. [Link](1222). 33 tidur selama 1222milisecond - 1 menit. b. Thread itu di%suspend( ) Thread yang ter%suspend bisa masuk kembali ke ruunable bila ia di resume.
,+45

'

,,,. [Link]( ). 33 thread memasuki state blok [Link]( ). 33 thread memasuki state runnable , c. Thread tersebut memanggil method wait( ) dari suatu objek yang sedang ia kunci. Thread tersebut bisa kembali ke ruunable bila ada thread lain yang memanggil method notify( ) atau notify&ll( ) dari objek tersebut. d. 4ila thread ini menunggu selesainya akti$itas yang berhubungan dengan 635. e. 4ila thread mencoba mengakses critical section dari suatu objek yang sedang dikunci oleh thread lain. 7ritical section adalah segmen dalam kode, bisa berupa method maupun blok dimana beberapa thread yang berbeda mengakses objek yang sama. Dead Suatu thread secara otomatis disebut mati bila method run()%nya sudah diselesaikan. Suatu thread juga bisa dead bila ia di stop( ). *ntuk mendefinisikan thread ada dua cara, yaitu # '. embuat subclass dati Thread ). engimplementasikan 6nterface 8unnable. !" Thread dengan #e#buat $ubcla$$ dari %a&a"lang"Thread : public class 7oba' e'tend$ Thread / String nama. coba'(String nm) / nama - nm . 0 public $oid run ( ) / for(int i - 2. i9'22. i::) / [Link] (nama). 0 0 public static $oid main (String args; <) / Thread t - [Link](). 33mendapatkan thread yg sedang berjalan [Link](t). [Link]=ame(>Threadku?). [Link](t). 33merubah nama thread coba' t' - new coba'(>&?). coba' t) - new coba'(>4?). coba' t1 - new coba'(>7?). t'.start(). 33mejalankan method run t).start(). [Link](). 00 5ut program diatas +rogram akan memberikan kluaran yang berbeda tiap kali eksekusi. isal # Thread;main,@,main< Thread;Threadku,@,main< &&&&&&&&44777747&4477&44447747,,,,.&&4444 (" Thread dengan #engi#ple#enta$i an Inter)ace Runnable 4entuk # Thread objek - new Thread(5bjekrunnable,9String nameA). [Link](). atau
,+45

new Thread(5bjekrunnable,9String nameA).start(). 7ontoh # public class 7oba) i#ple#ent$ Runnable / String nama. 7oba) (String nm) / nama-nm. Thread objek - new Thread(this) . [Link](). 0 public $oid run ( ) / for(int i - 2. i9'22.i::) / [Link] (nama). 0 0 public static $oid main (String args; <) / 7oba) t' - new 7oba)(>&?). 7oba) t) - new 7oba)(>4?). 7oba) t1 - new 7oba)(>7?). 00 5utput sama dengan contoh program pertama. et : untuk menjalankan thread, lakukan dengan memanggil method start(). Saat start() dijalankan maka sebenarnya mehod run() dari class dijalankan. *eni$ thread ada dua+,aitu : a. (aemon merupakan thread yang siklus hidupnya tergantung pada thread utama (main). 4ila thread induk berakhir, maka thread daemon juga berakhir. b. *ser merupakan thread yang memiliki siklus tidak tergantung pada siklus thread utama. apabila thread utama berakhir maka user thread akan terus dijalankan. -ontoh : import ja$[Link].B. public class user extends Thread / String nama. user(String nm) / super(nm). 3BBmenjalankan thread dengan sekali instantiasiB3 nama - nm . start(). 0 public $oid run ( ) / while(true) / [Link] (nama). 0 0 public static $oid main (String args; <) / user t' - new user(C&C). user t) - new user(C4C). user t1 - new user(C7C). try/ [Link](). [Link](C Tombol enter ditekanC).0 catch(65Dxception o) /[Link](o).0 [Link](CselesaiC). 00 '
,+45

&pabila dijalankan maka program ini akan menampilkan &, 4, dan 7 secara bergantian. 4ila kita menekan tombol enter maka akan keluar # Tombol enter ditekan selesai Setelah thread utama yang menjalankan method main berakhir maka thread yang telah dibuat akan terus berjalan karena merupakn tipe user thread. *ntuk menghentikan tekan tombol -ontrol.-" *ntuk menjadikan suatu thread menjadi daemon thread, gunakan method $etDae#on/true0" isal pada contoh' pada method 7oba'(String nm) menjadi # 7oba'(String nm) / super(nm). nama - nm . $etDae#on/true0 . start(). 0 maka ketika menekan enter program berhenti termasuk semua thread%thread yang ada. 1in roni$a$i Satu atau lebih thread membutuhkan akses yang hampir bersamaan ke suatu sumber daya terbagi, maka thread%thread tersebut perlu sangat memperhatikan agar hanya ada satu yang mengakses dalam satu saat. !a$a menyediakan dukungan tingkat bahasa yang unik untuk sinkronisasi yang disebut monitor. onitor adalah suatu objek yang digunakan sebagai kunci eksklusif untuk kepentingan bersama. 7ara untuk memasuki suatu monitor objek adalah dengan memanggil suatu method yang ditandai dengan kata kunci synchroniEe. 4entuk # synchroniEe(9objectA) / 33satemen yang akan disinkronisasikan 0 -ontoh 1,nchroni2ed perta#a class hasil/ $tatic &oid ceta (String str', String str)) / try / [Link] (str'). [Link]('222). [Link](str)). 0 catch(Dxception e) / [Link](e). 0 33 public class 7oba) implements 8unnable / String nama,angka. 7oba) (String str', String str)) / nama-str'. angka-str) . new Thread(this). 33membuat objk thread (new born) [Link](). 0 public &oid run / 0 4 [Link](str',str)) . 0 public static $oid main (String args; <) / new 7oba)(C&C,C'C). new 7oba)(C4C,C)C). new 7oba)(C7C,C1C). 00 out : AB-! ( 5
,+45

6ni disebabkan tidak adanya sesuatu yang menhgentikan ketiga thread untuk memanggil method yang sama pada objek yang sama. 4ila kita tambahkan kata kunci synchroniEed menjadi # class hasil 4 s,nchroni2ed static $oid cetak (String srt',String str)) /,,,,. 0 5ut menjadi # A! B( -5 -ontoh 1,nchroni2ed edua class hasil/ $oid cetak(String str', String str))/ try/ [Link] (str'). [Link]('22). [Link](str)). 0 catch(Dxception e)/[Link](e). 0 00 public class 7oba) implements 8unnable / String nama,angka. hasil cetak'. 7oba) (String str', String str),hasil cetak') / nama-str'. angka-str) .[Link]'-cetak'. Thread a - new Thread(this,?Thread sinkronisasi?). [Link](a). [Link]().0 public $oid run ( ) / $,nchroni2ed /ceta !0 /cetak'. cetak(nama,angka). 0 0 public static $oid main (String args; <) / hasil cetak' - new hasil(). 7oba) t' - new 7oba)(C&C,C'C,cetak'). 7oba) t) - new 7oba)(C4C,C)C,cetak'). 7oba) t1 - new 7oba)(C7C,C1C,cetak'). 00 5ut # Thread;Thread Sinkronisasi,@,main< Thread;Thread Sinkronisasi,@,main< Thread;Thread Sinkronisasi,@,main< &' 4) 71

,+45

6o#uni a$i Thread !a$a memasukkan suatu mekanisme antar%proses yang elegan berupa method wait, notify, dan notify&ll. ethod%method ini diimplementasikan sebagai method%method final pada objek sehingga semua class memilikinya. Getiga method tersebut hanya boleh dipanggil dari dalam method synchroniEed. wait # memberitahukan thread yang berlaku untuk menyerahkan monitor dan beristirahat sampai suatu jalinan lain memasuki monitor. notify# membangunkan jalinan pertama yang memanggil wait pada objek yang sama. notify&ll#membangunkan semua objek yang memanggil wait pada objek yang sama. Thread dengan prioritas tertinggi yang bangun akan jalan terlebih dahulu. Method c)la$$ thread : [Link]() menghasilkan objek thread berupa thread yang sedang berjalan. [Link]() enyebabkan runtime mengalihkan konteks dari thread yang berlaku ke thread lain yang tersedia dan dapat dijalankan. [Link](int n) enyebabkan thread yang berlaku beristirahat selam n milidetik. Method in$tan$ : start() emberitahukan runtime ja$a untuk menciptakan konteks jalinan dan menjalankannya. run() etod run adalah badan thread yang berjalan. stop() enyebabkan thread segera berhenti. suspend() Suspend mengambil thread tertentu dan menyebabkanya berhenti tanpa menghancurkan thread system yang berjalan sebelumnya. resume() (igunakan untuk menghidupkan method yang di%suspend. set+riority(int p) mengisiprioritas suatu thread dengan besaran integer. &da beberapa konstanta priority, yaitu 6=H+86586TI, =58 H+86586TI, dan &JH+86586TI, secara berurutan bernilai ',@,'2. get+riority() mengjhasilkan prioritas thread, berupa suatu nilai antara ' sampai '2. set=ame(String name) engulang pemberian nama thread sesuai dengan argument name.

,+45

Anda mungkin juga menyukai