THREADING
di dalam pembahasan ini, saya akan bahas Thread dari java
java.lang.Thread adalah Classnya
yang pasti haruslah Single Inheritance dari class Thread tersebut
Penciptaan Thread bisa 2 cara
yaitu dengan mengEKSTEND Thread dan Override Run Method
yang jadi masalah adalah bagaimana mensingkronkan nya?
bayangkan ini terjadi
class ini
import java.util.logging.Level;
import java.util.logging.Logger;
public class Locking {
public static void main(String[] args) {
RadarProcess r = new RadarProcess();
Computer eniac = new Computer(r, "eniac");
Computer win = new Computer(r, "win");
eniac.start();
win.start();
}
static class RadarProcess implements Runnable {
String computerName;
int counter;
int getCounter() {
return counter;
}
@Override
public void run() {
System.out.println("DARI KOMPUTER "+computerName);
System.out.println("RADAR MENCARI");
for (counter = 0; counter < 10; counter++) {
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(Locking.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("RADAR MENDETEKSI " + counter + " OBJECT");
}
}
}
static class Computer extends Thread {
public Computer(RadarProcess radarProcess, String computerName) {
super(radarProcess);
radarProcess.computerName = computerName;
}
}
}
bagaimanakah outputnya?
DARI KOMPUTER win
RADAR MENCARI
DARI KOMPUTER win
RADAR MENCARI
RADAR MENDETEKSI 0 OBJECT
RADAR MENDETEKSI 1 OBJECT
RADAR MENDETEKSI 2 OBJECT
RADAR MENDETEKSI 3 OBJECT
RADAR MENDETEKSI 4 OBJECT
RADAR MENDETEKSI 5 OBJECT
RADAR MENDETEKSI 6 OBJECT
RADAR MENDETEKSI 7 OBJECT
RADAR MENDETEKSI 8 OBJECT
RADAR MENDETEKSI 9 OBJECT
RADAR MENDETEKSI 10 OBJECT
eniacnya dimana??
disinilah, Concurrency dibutuhkan
:)
PENGHANCURAN THREAD
ada beberapa cara tentang penghancuran Thread
- Thread bisa saja berhenti apabila Thread tersebut selesai tereksekusi
- Method destroy() terpanggil., dengan dipanggilnya destroy() Thread akan berhenti tanpa ada cleanup dari Thread
- Method stop() terpanggil, dengan terpanggilnya method stop() ThreadDeath dengan Error dari superclass nya. akan terpanggil , dengan ini bisa saja Thread dibersihkan (cleanup) , method ini sudah ditinggalkan (deprecated) dikarenakan methdo stop() dapat menjadikan Object state menjadi tidak konsisten. karena itulah method stop() ditinggalkan.
- System.exit method dari java, dengan memanggil method ini, Thread bisa dihancurkan
Dengan Mengunakan System.exit Java akan Memanggil Thread yang di daftarkan di shutdownHook dengan method Runtime.getRuntime().addShutdownHook(Thread x);
Thread x akan terpanggil.
beda dengan menggunkan method Runtime.getRuntime().halt() dengan ini JVM akan langsung shutdown tanpa harus memanggil shutdownHook
TYPE THREAD
Thread bisa menjadi 2 tipe.
- USER THread
- DAEMON Thread