PERTEMUAN 7 MULTITHREADED PROGRAMMING

dokumen-dokumen yang mirip
Konsep Lanjut Pemrograman Berorientasi Obyek

PENANGANAN EKSEPSI. class Exc0 { public static void main (String args[]) { int d = 0; int a = 42 / d; } }

EXCEPTION HANDLING. 1. Mampu menangani eksepsi 2. Mengetahui dan memahami tentang multithreading 3. Dapat membuat program tentang exception handling

Class Thread juga menyediakan beberapa constants sebagai nilai prioritas. Tabel berikut ini adalah rangkuman dari class Thread.

PERTEMUAN 3 OBJEK DAN CLASS

Thread. 16 th week Estu Sinduningrum ST,MT

PERTEMUAN VII Multithreaded Programming. Praktikan mampu membuat program sederhana mengenai threading

Pemrograman Berorientasi Obyek (IT251) Ramos Somya, S.Kom., M.Cs.

Kelompok 12. Thread Java

Java Progamming Multithreading

BAB IX THREAD Thread ClassThread namavar = new ClassThread(); Namavar.start(); New ClassThread().start();

BAB 2. Class Thread. Setelah mempelajari modul ini peserta diharapkan dapat: Mengenal Kelas Thread Menggunakan Kelas Thread dalam aplikasi

Exception Handling and Multithreading

PEMROGRAMAN JAVA : THREAD

Score: Persentase: % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.

PEMROGRAMAN BERORIENTASI OBJEK COLLECTION DAN MULTITHREADING. ADAM MUKHARIL BACHTIAR TEKNIK INFORMATIKA UNIKOM

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

BAB 2 COLLECTION & THREAD

Pemrograman Berorientasi Objek Collection dan Multithreading. Adam Mukharil Bachtiar Teknik Informatika UNIKOM

Pada pembuatan game di java, sering kali para programer. mendefinisikan banyak object seperti suara, gambar, dan grafik geometri yang

PERTEMUAN I PENGENALAN JAVA

2. Pilih instruksi yang dapat digunakan dalam method actionperformed untuk membedakan antara tombol buttonone dan buttontwo.

Mengunci sebuah object: Untuk memastikan bahwa hanya satu thread yang mendapatkan hak akses kedalam method tertentu

1. Latar Belakang Didalam pembuatan game java sering kali kita mendefinisikan banyak object seperti gambar, dan grafik geometri yang begitu banyak,

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

1. Mampu mengimplementasikan thread dalam sebuah aplikasi 2. Memahami kegunaan thread dalam aplikasi

Network Programming 2010 Pemrograman Multi-Thread

Sistem Operasi. Proses dan Thread

PERTEMUAN 5 OOP. Objektif : Praktikan mengetahui konsep OOP. Praktikan dapat membuat program sederhana dengan konsep OOP.

1.Tujuan. 2. Latar Belakang

TUGAS SISTEM TERDISTRIBUSI MULTYTHREAD EKO SURIPTO P

Modul Praktikum 1 Pemograman Berorientasi Objek

Modul Praktikum Pemrograman

Pertemuan 2 (2) : Membuat Class dan mengakses Anggota Class

TUGAS Mata Kuliah : Sistem Terdistribusi

MODUL 3. Inheritance, Abstract Class, Interface TUJUAN PRAKTIKUM LANDASAN TEORI. A. Inheritance

MODUL PRAKTIKUM Matematika Informatika 2

PRAKTIKUM 6 EXCEPTION

Pertemuan 2 Struktur Kontrol Percabangan

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 1 PENGENALAN LINGKUNGAN PEMROGRAMAN JAVA

MODUL 4 KONSEP PROSES, KONKURENSI, MANAJEMEN PROSES (1) M. R A J A B F A C H R I Z A L - S I S T E M O P E R A S I - M O D U L 4

MODUL 5 MANAJEMEN PROSES (2) (PENJADWALAN PROSES)

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

BAB 2 INPUT DARI KEYBOARD

Praktikum 9 Exception Handling

Java Application. Aplikasi: Menampilkan Tulisan

Konsep Proses. Proses adalah suatu program yang sedang diesekusi (running) Pada saat proses berlangsung :

PENGATURAN PROSES. Proses adalah program yang sedangdieksekusi atau sofware yang sedang dilaksanakan.

INTRODUCTION JAVA NORHIKMAH,M.KOM

Input Nilai tanpa Case String di Java

Java Application. Menampilkan Tulisan

Pemrograman Berorientasi Object

Pengenalan Program Java

AP2B Dini Triasanti STRUKTUR PEMROGRAMAN PYTHON

PROSES DAN THREAD. : Anggo Luthfi Yunanto. Nim : : sistem informasi

I. Tujuan Instruksional Umum Mengenal konsep dasar berorientasi objek Memahami dan dapat mengimplementasikan Kelas dan Objek pada java.

Bab 26. Readers/Writers

1. Mana diantara pilihan-pilihan berikut ini yang merupakan penulisan loop yang benar?

SATUAN ACARA PERKULIAHAN MATA KULIAH: Algoritma & Pemrograman 3 Strata/Jurusan : S1/Sistem Komputer

Pertemuan 4 Array pada Java

Pemograman Java. Yoannita, S.Kom. Argumen Command Line Exception Handling Package

Percobaan 6 Exception

Membuat dan Menggunakan Class

Operating System. Thread. Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan. Dosen : Caca E. Supriana, S.Si

MANAJEMEN PROSES. Pointer State proses Keadaan proses: Keadaan mungkin, new, ready, running, waiting, halted, dan juga banyak lagi.

PERCOBAAN 6 EXCEPTION

BAB 5 Mendapatkan Input dari Keyboard

Andi Gustanto M / Kelas 22 / TI

Monitor. Process Synchronization. SISTIM OPERASI (IKI-20230) ProcessSynchronization Ch. 6. Johny Moningka

int i = 0; while (i < 10) { System.out.println( Informatika Unpas ); i++; }

BAB 8 Argumen dari Command-line

BONUS. Dasar Java Mobile. Mengenal Java Mobile Mengenal MIDlet Mobile Grafis Mobile Animasi Latihan Soal

Sistem Operasi PENGATURAN PROSES

4. Apa yang dimaksud dengan user mode?(nilai 3) Jawab: Adalah kondisi pada saat program user (job) sedang dieksekusi oleh prosesor.

BAB 5 Mendapatkan Input dari Keyboard

SUMBER BELAJAR PENUNJANG PLPG

Percabangan & Perulangan

SATUAN ACARA PERKULIAHAN MATA KULIAH: Algoritma & Pemrograman 3 Strata/Jurusan : D3/Teknik Komputer

SISTEM OPERASI THREAD DAN MULTITHREADING

TPI4202 e-tp.ub.ac.id. Lecture 4 Mas ud Effendi

2. Software yang dibutuhkan Untuk membuat sebuah program java, minimal yang dibutuhkan adalah:

Pemrograman Berorientasi. Class dan Obyek 2

GameCanvas digunakan untuk memperluas fungsi yang dimiliki oleh class Canvas

Pengenalan OOP. Object-Oriented programming (OOP) Menitikberatkan pada konsep object sebagai elemen dasar dari program.

TUGAS PROGRAM DIAGONAL, VETIKAL, DAN HORIZONTAL OPENGL (MENGGUNAKAN JAVA) NAMA : SYIFA MUTIARA SARI KELAS : 3KA23 NPM :

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER JAKARTA STI&K SATUAN ACARA PERKULIAHAN

MODUL 3 PEWARISAN TUJUAN DASAR TEORI

Modul Praktikum 4 Pemograman Berorientasi Objek

PEMOGRAMAN JAVA. Yoannita. Tipe Data (ii) : Array Exception Handling

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

Definisi Eksepsi (exception)

THREAD Ulir utas thread

BAB 1 PEMROGRAMAN BERORIENTASI OBJEK

Tujuan Intruksional. Mampu menjelaskan tentang event handling Mampu menjelaskan tentang method Mampu menggunakan event handling Mampu membuat method

1.Proses control block dalam istilah lain Taks controlling block, Taks struct, atau Switchframe. Jelaskan dan berikan gambaran proses control block?

Sesi 8. Event Handling & Exception Handling. Tujuan Intruksional

Bab Tujuan. 9.2 Definisi dan dasar-dasar thread Definisi Thread

Modul Praktikum 3 Pemograman Berorientasi Objek

BAB 4. SINKRONISASI & DEADLOCK

Transkripsi:

Obyektif Praktikum : Mendefiniskan threads Mengerti perbedaan state dalam threads Mengerti konsep prioritas dalam threads PERTEMUAN 7 MULTITHREADED PROGRAMMING Mengetahui bagaimana menggunakan method didalam class Thread Membuat sendiri sebuah thread Menggunakan sinkronisasi pada thread yang bekerja bersama-sama dan saling bergantung satu dengan yang lainya Memungkinkan thread untuk dapat berkomunikasi dengan thread lain yang sedang berjalan Mengerti dan menggunakan kemampuan concurency 1

MULTITHREADING DAN THREAD Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi atau proses dapat dijalankan secara bersamaan dalam sebuah program. Satu kumpulan instruksi yang akan dieksekusi secara independen dinamakan thread. Keuntungan Multithreading : Responsif Ekonomis Utilitas Arsitktur multiprosesor Kerugian Multithreading : Jika digunakan secara berlebihan, multithreading akan berdampak pada pemborosan resource dan CPU yang dialokasikan untuk switching threads. Sistem yang memiliki kecepatan prosesor dan memory yang cenderung sama, sehingga tidak ada efisiensi yang hilang (mengacu kepada latency), tidak akan memperoleh peningkatan bandwidth yang signifikan jika menggunakan multithreading. Multithreading menghasilkan program yang lebih kompleks. Thread yang banyak bisa saling berinterferensi ketika saling berbagi sumber daya hardware seperti cache. 2

PEMBUATAN THREAD Sebuah thread memungkinkan untuk memiliki beberapa state : 1. Running Sebuah thread yang pada saat ini sedang dieksekusi dan didalam control dari CPU. 2. Ready to run Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan untuk melakukannya. 3. Resumed Setelah sebelumnya di block atau diberhentikan sementara, state ini kemudian siap untuk dijalankan. 4. Suspended Sebuah thread yang berhenti sementara, dan kemudian memperbolehkan CPU untuk menjalankan thread lain bekerja. 5. Blocked Sebuah thread yang di-block merupakan sebuah thread yang tidak mampu berjalan, karena ia akan menunggu sebuah resource tersedia atau sebuah event terjadi. 3

Pembentukan Thread Ada dua cara untuk membuat thread di program Java, yaitu : extends kelas Thread dan implements interface Runnable. Interface Runnable didefinisikan sebagai berikut: public interface Runnable public abstract void run(); a) Extends kelas Thread Kelas Thread secara implisit juga meng-implements interface Runnable. Oleh karena itu, setiap kelas yang diturunkan dari kelas Thread juga harus mendefinisikan method run(). Berikut ini adalah contoh kelas yang menggunakan cara pertama untuk membuat thread, yaitu dengan meng-extends kelas Thread. class CobaThread1 extends Thread public void run() for (int ii = 0; ii<4; ii++) System.out.println("Ini CobaThread1"); Test.istirohat(11); 4

Pembentukan Thread b) Implements interface Runnable Adanya kekurangan yang cukup fatal pada metode extends, maka cara kedua, yaitu mengimplements interface Runnable, lebih umum digunakan, karena kita bisa mengimplements dari banyak kelas sekaligus. Contoh : class CobaThread2 implements Runnable public void run() for(int ii = 0; ii<4; ii++) System.out.println("Ini CobaThread2"); Test.istirohat(7); public class Test public static void main (String[] args) Thread t1 = new CobaThread1(); Thread t2 = new Thread (new CobaThread2()); t1.start(); t2.start(); for (int ii = 0; ii<8; ii++) System.out.println("Thread UTAMA"); istirohat(5); public static void istirohat(int tunda) try Thread.sleep(tunda*100); catch(interruptedexception e) 5

newborn Daur Hidup Thread 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 ( ); 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(); 6

Blocked Daur Hidup Thread Pada tahap ini thread sedang tidak beraksi dan diabaikan dalam penjadwalan. Suatu thread terblok jika : a) Thread itu tidur untuk jangka waktu tertentu. Thread.sleep(3000); // tidur selama 3000milisecond = 3 menit. b) 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 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 notifyall( ) dari objek tersebut. d) Bila thread ini menunggu selesainya aktivitas yang berhubungan dengan I/O. e) 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. Dead Suatu thread secara otomatis disebut mati bila method run()-nya sudah diselesaikan. Suatu thread juga bisa dead bila ia di stop( ). 7

Daur Hidup Thread Keberadaan sebuah thread dimulai tepat ketika thread tersebut diciptakan. Sebuah thread dieksekusi sampai salah satu kondisi berikut terjadi: 1. Eksekusi terhadap run() berakhir, 2. Terinterupsi oleh eksepsi yang tidak tertangkap, 3. Metode stop() dipanggil. Thread pada Java ditangani melalui dua mekanisme : Cara pertama dilakukan dengan memperluas kelas Thread. Cara kedua dilakukan dengan mengimplementasikan Runnable. 8

Daur Hidup Thread Thread dengan membuat subclass dari java.lang.thread : public class Coba1 extends Thread String nama; coba1(string nm) nama = nm ; public void run ( ) for(int i = 0; i<100; i++) System.out.print (nama); 9

Daur Hidup Thread public static void main (String args[ ]) Thread t = Thread.currentThread();//mendapatkan thread yg sedang berjalan System.out.println(t); t.setname( Threadku ); System.out.prinln(t); //merubah nama thread coba1 t1 = new coba1( A ); coba1 t2 = new coba1( B ); coba1 t3 = new coba1( C ); t1.start(); //mejalankan method run t2.start(); t3.start(); Output dari program diatas : Misal : Thread[main,5,main] Thread[Threadku,5,main] AAAAAAAABBCCCCBCABBCCABB BBCCBC.AABBBB 10

Daur Hidup Thread Thread dengan mengimplementasikan Interface Runnable Bentuk : Thread objek = new Thread(Objekrunnable,<String name>); Objek.start(); atau new Thread(Objekrunnable,<String name>).start(); Contoh : public class Coba2 implements Runnable String nama; Coba2 (String nm) nama=nm; Thread objek = new Thread(this) ; objek.start(); public void run ( ) for(int i = 0; i<100;i++) System.out.print (nama); public static void main (String args[ ]) Coba2 t1 = new Coba2( A ); Coba2 t2 = new Coba2( B ); KET : untuk menjalankan thread, lakukan dengan Coba2 t3 = new Coba2( C ); memanggil method start(). Saat start() dijalankan maka sebenarnya mehod run() dari class dijalankan. 11

Daur Hidup Thread Jenis thread ada dua,yaitu : a) Daemon merupakan thread yang siklus hidupnya tergantung pada thread utama (main). Bila thread induk berakhir, maka thread daemon juga berakhir. b) User merupakan thread yang memiliki siklus tidak tergantung pada siklus thread utama. apabila thread utama berakhir maka user thread akan terus dijalankan. Contoh : import java.io.*; public class user extends Thread String nama; user(string nm) super(nm); /**menjalankan thread dengan sekali instantiasi*/ nama = nm ; start(); public void run ( ) while(true) System.out.print (nama); public static void main (String args[ ]) user t1 = new user("a"); user t2 = new user("b"); user t3 = new user("c"); try System.in.read(); System.out.println(" Tombol enter ditekan"); catch(ioexception o) System.out.println(o); System.out.println("selesai"); 12

Sinkronisasi & Prioritas Thread 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. Bentuk Umum : synchronize(<object>) //satemen yang akan disinkronisasikan Contoh Synchronized pertama class hasil static void cetak(string str1, String str2) try System.out.print (str1); Thread.sleep(1000); System.out.println(str2); catch(exception e) System.out.println(e); 13

Sinkronisasi & Prioritas Thread public class Coba2 implements Runnable String nama,angka; Coba2 (String str1, String str2) nama=str1; angka=str2 ; new Thread(this); //membuat objk thread (new born) objek.start(); public void run ( ) hasil.cetak(str1,str2) ; public static void main (String args[ ]) new Coba2("A","1"); new Coba2("B","2"); new Coba2("C","3"); Output : ABC1 2 3 14

Sinkronisasi & Prioritas Thread Komunikasi Thread 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. Method cflass thread : Thread.currentThread() menghasilkan objek thread berupa thread yang sedang berjalan. Thread.yield() Menyebabkan runtime mengalihkan konteks dari thread yang berlaku ke thread lain tersedia dan dapat dijalankan. Thread.sleep(int n) Menyebabkan thread yang berlaku beristirahat selam n milidetik. yang 15

Method instans : Sinkronisasi & Prioritas Thread start() Memberitahukan runtime java untuk menciptakan konteks jalinan dan menjalankannya. run() Metod run adalah badan thread yang berjalan. stop() Menyebabkan thread segera berhenti. suspend() Suspend mengambil thread tertentu dan menyebabkanya berhenti tanpa menghancurkan thread system yang berjalan sebelumnya. resume() Digunakan untuk menghidupkan method yang di-suspend. setpriority(int p) mengisiprioritas suatu thread dengan besaran integer. Ada beberapa konstanta priority, yaitu MIN_PRIORITY, NORM_PRIORITY, dan MAX_PRIORITY, secara berurutan bernilai 1,5,10. getpriority() menghasilkan prioritas thread, berupa suatu nilai antara 1 sampai 10. setname(string name) Mengulang pemberian nama thread sesuai dengan argument name. 16

Contoh Program Priority Thread class Tr11 extends Thread String nama; Tr11(String nm)nama=nm; public void run() try while(true) System.out.println("Namaku: "+nama); sleep(1000); catch(interruptedexception e); Output : public static void main(string[] arg) C:\JAVA\bin>java Th5 Thread t1=new Tr11("JOKO"); Halo saya Thread : Merlot Halo saya Thread : Pinot Thread t2=new Tr11("BUDI"); Halo saya Thread : Cabernet t1.start(); t2.start(); System.out.println("Prioritas t1 = "+t1.getpriority()); System.out.println("Prioritas t2 = "+t1.getpriority()); t2.setpriority(1); 17

Contoh Program Sederhana Thread class Grape extends Thread Grape(String s)super(s); //constructor public void run() System.out.println("Halo saya Thread :"+super.getname()); class Th5 public static void main(string[] args) Grape g1=new Grape("Merlot"); Grape g2=new Grape("Pinot"); Grape g3=new Grape("Cabernet"); g1.start(); g2.start(); g3.start(); 18

Latihan Program Berikut ini adalah contoh program sederhana menggunakan thread. Ikutilah langkah-langkah berikut : Step 1 : Buka dan ketikan program pada teks editor notepad++ Anda. Simpan nama file pertama sama seperti nama classnya, yaitu : MyThread.java Misal disimpan pada direktori D folder praktikan MyThread.java Ketikkan program berikut pada teks editor Anda. class thethread implements Runnable Thread t; thethread() t = new Thread(this, "DemoThread"); System.out.println("Child Thead : " + t); t.start(); 19

*Buatlah method run yang bersifat public dan tidak mengembalikan nilai try *Buatlah perulangan menggunakan for dengan inisialisasi i = 5, syaratnya i lebih besar dari nol, dan stepnya decrement i (i--) System.out.println("Child Thread : " + i); Thread.sleep(500); catch(interruptedexception e) System.out.println("Child Interrupted"); System.out.println("Exiting Child Thread"); 20

//program utama *Deklarasikan Class public static void main(string args[]) new thethread(); try for(int i=5;i>0;i--) *Cetak main thread ("Main Thread : " + i); Thread.sleep(1000); catch(interruptedexception e) System.out.println("main Interrupted"); System.out.println("Exiting Main Thread"); 21

Step 2 : Ikuti langkah berikut untuk meng-compile program yang telah Anda buat. Buka command prompt Anda. Masuk ke direktori dan folder tempat program tersebut disimpan. Misal program disimpan pada direktori D folder praktikan Perintah masuk/pindah ke direktori D, ketik D: Perintah masuk ke folder praktikan, ketik cd<spasi>praktikan Setelah masuk ke direktori dan folder yang dituju, untuk meng-compile program Anda ketikkan perintah : Contoh : Step 3 : javac<spasi> MyThread.java javac MyThread.java Untuk menjalankan program yang telah Anda buat, ketikkan perintah : Contoh : java<spasi>namafile java MyThread 22

Tampilan Output 23

Koreksi Latihan Program class thethread implements Runnable Thread t; thethread() t = new Thread(this, "DemoThread"); System.out.println("Child Thead : " + t); t.start(); // Membuat method run yang bersifat public dan tidak mengembalikan nilai public void run() try for(int i=5;i>0;i--) System.out.println("Child Thread : " + i); Thread.sleep(500); catch(interruptedexception e) 24

System.out.println("Child Interrupted"); System.out.println("Exiting Child Thread"); class MyThread //program utama public static void main(string args[]) new thethread(); try for(int i=5;i>0;i--) System.out.println("Main Thread : " + i); Thread.sleep(1000); catch(interruptedexception e) System.out.println("main Interrupted"); System.out.println("Exiting Main Thread"); 25