MULTITHREADING
MULTITHREADING
,PBO 1
……….
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( ).
Out program diatas Program akan memberikan kluaran yang berbeda tiap kali eksekusi.
Misal : Thread[main,5,main]
Thread[Threadku,5,main]
AAAAAAAABBCCCCBCABBCCABBBBCCBC………….AABBBB
,PBO 2
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”);
Coba2 t3 = new Coba2(“C”);
}}
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); } }
,PBO 3
1
Apabila dijalankan maka program ini akan menampilkan A, B, dan C secara
bergantian. Bila 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. Untuk menghentikan tekan
tombol Control+C.
Untuk menjadikan suatu thread menjadi daemon thread, gunakan method
setDaemon(true). Misal pada contoh1 pada method Coba1(String nm) menjadi :
maka ketika menekan enter program berhenti termasuk semua thread-thread yang ada.
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.
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); }
}}
,PBO 4
3
Ini disebabkan tidak adanya sesuatu yang menhgentikan 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
class hasil{
void cetak(String str1, String str2){
try{
System.out.print (str1); Thread.sleep(100);
System.out.println(str2); }
catch(Exception e){System.out.println(e); }
}}
public class Coba2 implements Runnable
{ String nama,angka;
hasil cetak1;
,PBO 5
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.
,PBO 6