Pemrograman Berorientasi Obyek By : Sendi Novianto, S.Kom, M.T Email : to_sendi@yahoo.com Materi Diskusi 1. Konsep Pemrograman dan Paradigmanya Tingkat Bahasa Pemrograman, Paradigma Pemrograman, Tool Pemrograman 2. Konsep Dasar Pemrograman Berorientasi Obyek: Kelas (Class), Obyek (Object), Pengkapsulan (Encapsulation), Pewarisan (Inheritance), Polymorphisme 3. Konsep Lanjut Pemrograman Berorientasi Obyek: Constructor, Destructor, Overloading, Overriding, Keyword This,, Package, Interface, Exception By : Sendi Novianto, S.Kom, M.T. 2 Konsep Lanjut Pemrograman Berorientasi Obyek By : Sendi Novianto, S.Kom, M.T. 3 By : Sendi Novianto, S.Kom, M.T. 4? 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. 5 By : Sendi Novianto, S.Kom, M.T. 6 1
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. 8 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 By : Sendi Novianto, S.Kom, M.T. 10 Blocked Pada tahap ini thread sedang tidak beraksi dan diabaikan dalam penjadwalan. Suatu thread terblok jika : Thread itu tidur untukjangka 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 Thread tersebut memanggil method wait( ) dari suatu objek yang sedang ia kunci. Thread tersebutbisa kembalike ruunablebila ada thread lain yang memanggil method notify( ) ataunotifyall( ) dariobjektersebut. Bila thread ini menunggu selesainyaaktivitasyang berhubungandengani/o. Bila thread mencobamengaksescritical section darisuatu objekyang sedangdikunci 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 Dead Suatu thread secara otomatis disebut mati bila method run()-nya sudah diselesaikan. Suatu thread juga bisa dead bila ia di stop( ). By : Sendi Novianto, S.Kom, M.T. 12 2
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 By : Sendi Novianto, S.Kom, M.T. 15 Thread dengan mengimplementasikaninterface 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 By : Sendi Novianto, S.Kom, M.T. 17 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(<object>) { //satemen yang akan disinkronisasikan } By : Sendi Novianto, S.Kom, M.T. 18 3
Contoh Synchronized pertama out : ABC1 2 3 By : Sendi Novianto, S.Kom, M.T. 19 By : Sendi Novianto, S.Kom, M.T. 20 By : Sendi Novianto, S.Kom, M.T. 21 Contoh Synchronized pertama Ini disebabkan tidak adanya sesuatu yang menghentikan ketiga thread untuk memanggil method yang sama pada objek yang sama. Bila kita tambahkan kata kunci synchronized menjadi : class hasil { synchronized static void cetak (String srt1,string str2) { } Out menjadi : A1 B2 C3 By : Sendi Novianto, S.Kom, M.T. 22 Komunikasi Thread Java memasukkan suatu mekanisme antar-proses yang elegan berupa method wait, notify, dan notifyall. Method-method ini diimplementasikan sebagai method-method final pada objek sehingga semua class memilikinya. Ketiga method tersebut hanya boleh dipanggil dari dalam method synchronized. 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. notifyall:membangunkan semua objek yang memanggil wait pada objek yang sama. Thread dengan prioritas tertinggi yang bangun akan jalan terlebih dahulu. By : Sendi Novianto, S.Kom, M.T. 23 By : Sendi Novianto, S.Kom, M.T. 24 4
Method class thread : Thread.currentThread() menghasilkan objek thread berupa thread yang sedang berjalan. Thread.yield() Menyebabkan runtime mengalihkan konteks dari thread yang berlaku ke thread lain yang tersedia dan dapat dijalankan. Thread.sleep(int n) Menyebabkan thread yang berlaku beristirahat selama n milidetik. By : Sendi Novianto, S.Kom, M.T. 25 Method instans : start() Memberitahukanruntime java untukmenciptakankonteksjalinan dan menjalankannya. run() Metod run adalahbadanthread yang berjalan. stop() Menyebabkan thread segera berhenti. suspend() Suspend mengambilthread tertentu dan menyebabkanyaberhentitanpamenghancurkan thread system yang berjalan sebelumnya. resume() Digunakan untuk menghidupkan method yang di-suspend. setpriority(int p) mengisiprioritassuatuthread denganbesaraninteger. Ada beberapakonstantapriority, yaitu MIN_PRIORITY, NORM_PRIORITY, dan MAX_PRIORITY, secara berurutan bernilai 1,5,10. getpriority() mengjhasilkanprioritasthread, berupasuatu nilaiantara1 sampai10. setname(string name) Mengulang pemberian nama thread sesuai dengan argument name. By : Sendi Novianto, S.Kom, M.T. 26 Java Desktop By : Sendi Novianto, S.Kom, M.T. 27 By : Sendi Novianto, S.Kom, M.T. 28 5