Minggu, 01 Desember 2013

Threading & Synchronization


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

  1. Thread bisa saja berhenti apabila Thread tersebut selesai tereksekusi
  2. Method destroy() terpanggil., dengan dipanggilnya destroy() Thread akan berhenti tanpa ada cleanup dari Thread
  3. 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.
  4. 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. 
  1. USER THread
  2. DAEMON Thread
Daemon Thread adalah Thread yang never terminate, atau tidak dapat dihancurkan,