1 Pemrograman Berorientasi Obyek By : Sendi Novianto, S.Kom, M.T Materi Diskusi 1. Konsep Pemrograman dan Paradigmanya Tingkat Bahasa Pemrograman, P...
By : Sendi Novianto, S.Kom, M.T Email : [email protected] By : Sendi Novianto, S.Kom, M.T.
Konsep Lanjut Pemrograman Berorientasi Obyek By : Sendi Novianto, S.Kom, M.T.
2
Multithreading
3
By : Sendi Novianto, S.Kom, M.T.
4
Multithreading ?
Multithreading
Keuntungan • Thread bersifat lightweight, sedangkan proses lebih berat. Perlu diketahui bahwa proses adalah program yang sedang berada di memory atau processor, sedang dieksekusi. Thread dapat diartikan sebagai anak dari proses. • Thread-thread berbagi pakai ruang alamat yang sama dan karena itu dapat berbagi pakai data dan kode (instruksi) • Context switching antar thread biasanya lebih murah daripada antar proses. • Biaya komunikasi antar thread relatif lebih rendah daripada komunikasi antar proses. • Thread memungkinkan task-task berbeda dikerjakan secara konkuren.
Ada dua macam thread dalam Java, yaitu : • Daemon thread, merupakan thread yang siklus hidupnya tergantung pada thread utama. Apabila thread utama berakhir maka otomatis threadthread daemon juga berakhir. Untuk menjadikan suatu thread menjadi daemon thread, gunakan method setDaemon(true) • User thread, apabila thread utama berakhir maka user thread akan terus dijalankan.
By : Sendi Novianto, S.Kom, M.T.
By : Sendi Novianto, S.Kom, M.T.
5
6
1
4/2/2013
Multithreading
Multithreading
Daur Hidup Thread • Newborn • Runnable • Running • Blocked • Dead
Newborn • thread diinstantiasi, sebuah ruangan di telah dialokasikan untuk thread ini dan telah menyelesaikan tahap inisialisasi. Pada state ini, timerThread belum masuk dalam skema penjadwalan. …. Thread coba = new Thread ( ); ….
By : Sendi Novianto, S.Kom, M.T.
7
By : Sendi Novianto, S.Kom, M.T.
Multithreading
Multithreading
Runnable • Sebuah thread berada dalam skema penjadwalan akan tetapi dia tidak sedang beraksi. ….. coba.start()
Running • Pada state ini, thread sedang beraksi. Jatah 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 void run ( ){ … Thread.yield(); …. }
By : Sendi Novianto, S.Kom, M.T.
9
Multithreading
By : Sendi Novianto, S.Kom, M.T.
8
10
Multithreading
Blocked • Pada tahap ini thread sedang tidak beraksi dan diabaikan dalam penjadwalan. Suatu thread terblok jika : – Thread itu tidur untuk jangka waktu tertentu. Thread.sleep(3000); // tidur selama 3000milisecond = 3 menit. – Thread itu di-suspend( )
Thread yang ter-suspend bisa masuk kembali ke ruunable bila ia di resume. ………. timerThread.suspend( ); // thread memasuki state blok timerThread.resume( ); // thread memasuki state runnable …
Dead Suatu thread secara otomatis disebut mati bila method run()-nya sudah diselesaikan. Suatu thread juga bisa dead bila ia di stop( ).
– 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 notifyAll( ) dari objek tersebut. – Bila thread ini menunggu selesainya aktivitas yang berhubungan dengan I/O. – Bila thread mencoba mengakses critical section dari suatu objek yang sedang dikunci oleh thread lain. Critical section adalah segmen dalam kode, bisa berupa method maupun blok dimana beberapa thread yang berbeda mengakses objek yang sama. By : Sendi Novianto, S.Kom, M.T.
11
By : Sendi Novianto, S.Kom, M.T.
12
2
4/2/2013
Multithreading
Multithreading
Untuk mendefinisikan thread ada dua cara • Membuat subclass dari Thread • Mengimplementasikan Interface Runnable.
Thread dengan membuat subclass dari java.lang.Thread : Out program diatas Program akan memberikan kluaran yang berbeda tiap kali eksekusi. Misal : Thread[main,5,main] Thread[Threadku,5,main] AAAAAAAABBCCCCBCABBCCABBBBCCBC…………. AABBBB
By : Sendi Novianto, S.Kom, M.T.
13
By : Sendi Novianto, S.Kom, M.T.
14
Multithreading
By : Sendi Novianto, S.Kom, M.T.
15
Thread dengan mengimplementasikan Interface Runnable Bentuk : Thread objek = new Thread(Objekrunnable,<String name>); Objek.start(); atau new Thread(Objekrunnable,<String name>).start(); Contoh : Output sama dengan contoh program pertama. ket : untuk menjalankan thread, lakukan dengan memanggil method start(). Saat start() dijalankan maka sebenarnya mehod run() dari class dijalankan. By : Sendi Novianto, S.Kom, M.T.
16
Multithreading Sinkronisasi • 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. Java menyediakan dukungan tingkat bahasa yang unik untuk sinkronisasi yang disebut monitor. Monitor adalah suatu objek yang digunakan sebagai kunci eksklusif untuk kepentingan bersama. Cara untuk memasuki suatu monitor objek adalah dengan memanggil suatu method yang ditandai dengan kata kunci synchronize. • Bentuk : synchronize(