Senin, 25 Juni 2012

Daur Hidup Thread dan Sinkronisasi

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.

Untuk mengetahui suatu thread masih hidup atau sudah mati, metode bernama isAlive() pada kelas Thread bisa digunakan. Metode ini memberikan nilai balik berupa true jika thread masih hidup dan false jika sudah mati.

Contoh3:
// nama file : UjiThread3.java
public class UjiThread3 {
public static void main (String [] args) {
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");
m1.start();
m2.start();
// beri komentar ketika thread berakhir
boolean m1Berakhir=false;
boolean m2Berakhir=false;
do {
// cek keberadaan thread m1
if (!m1Berakhir && !m1.isAlive()){
m1Berakhir=true;
System.out.println("Thread m1 berakhir");
}
// cek keberadaan thread m2
if (!m2Berakhir && !m2.isAlive()){
m2Berakhir=true;
System.out.println("Thread m2 berakhir"); } }
while (!m1Berakhir || !m2Berakhir);}}

class Mobil extends Thread {

// konstruktor
public Mobil (String id) {
super (id);
}
// Mendefinisikan sendiri run()
public void run() {
String nama = getName();
for (int i=0; i<5; i++) {
try {
sleep(1000); // Tunggu 1 detik
}
catch(InterruptedException ie) {
System.out. println("Terinterupsi");
}
System.out.println("Thread " + nama + ":Posisi" + i );
} } }

Sinkronisasi
ð Upaya agar kode tertentu dijalankan secara berurutan dengan jaminan kode tersebut tidak akan dijalankan oleh yang lain dalam waktu bersamaan.

ð Jika sinkronisasi diterapkan dalam metode, dipastikan bahwa seluruh kode di dalam metode tersebut dijalankan tanpa diinterupsi oleh yang lain.

Contoh:
// nama file : TesSinkron.java
public class TesSinkron {
public static void main (String [] args) {
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");
m1.start();
m2.start();
}  }

class Mobil extends Thread {
// konstruktor
public Mobil (String id) {
super (id);
}
// Mendefinisikan sendiri run()
public void run() {
String nama = getName();
SinkronisasiKeluaran.info(nama);
} }

class SinkronisasiKeluaran {
public static synchronized void info(String nama){
for (int i=0; i<5; i++) {
try {
Thread.sleep(1000);
}

catch(InterruptedException ie) {
System.out.println("Terinterupsi");
}

System.out.println("Thread " + nama + ":Posisi" + i );
} } }

Tidak ada komentar:

Posting Komentar

Followers