Selasa, 11 Juni 2013

Contoh Program Java dengan Menggunakan “ thread objects ”

STARTING A THREAD
(contoh program dengan menggunakan “ thread objects ”)

NAMA              : IMAM GHAZALI M.
NIM                  : H111 12 257
PRODI              : MATEMATIKA

1. Subclass Thread
                contoh 1 :                  
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package coba.thread;

/**
 *
 * @author Imam Ghazali M
 */
public class CobaThread {
    public static void main (String [] args) {
    Baju baju1 = new Baju("Baju-1");
    Baju baju2 = new Baju("Baju-2");
    baju1.start();
    baju2.start();
    }
}
    class Baju extends Thread {
        // konstruktor
        public Baju (String id) {
            super (id);
        }
        // Mendefinisikan sendiri run()
    @Override
    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 );
        }
}}


Pembahasan Contoh 1 : 
public class CobaThread {

    public static void main (String [] args) {
    Baju baju1 = new Baju("Baju-1");
    Baju baju2 = new Baju("Baju-2");
    baju1.start();
    baju2.start();
    }
}

  • Pada metode main(), yang menjadi titik awal pengeksekusian program, dua buah objek berkelas Baju diciptakan dan dirujuk oleh baju1 dan baju2 secara berturutan. 


  • Pernyataan baju1.start(), yang terletak sesudah penciptaan kedua objek berkelas Baju digunakan untuk menjalankan metode run() yang terdapat pada kelas Baju untuk objek yang dirujuk oleh baju1. 


  • Serupa dengan hal itu. baju2.start(); Akan membuat run() pada kelas Baju untuk objek yang dirujuk oleh baju2 dijalankan. 


  • Pendefinisian kelas Baju dilakukan dengan membuatnya sebagai subkelas dari kelas Thread. Seperti sintaks berikut:



class Baju extends Thread {

  • kelas Baju menyebutkan extends Thread. Didalam pendefinisian kelas Baju terdapat pendefinisian konstruktor Baju dan metode run(). Konstruktor didefinisikan sebagai berikut:


public Baju (String id) {
      super (id);
        }

  • Konstruktor mengandung sebuah parameter yang mewakili nama untuk thread. Parameter ini dilewatkann ke superkelas dengan memanggil super(id); 


  • Metode run() menyatakan tindakan yang akan dilakukan oleh thread. Pada contoh ini, mula-mula nama thread diambil melalui pemanggilan metode getName() dan kemudian diberikan ke variabel bernama nama yang bertipe String. Selanjutnya, pernyataan for digunakan untuk menuliskan informasi sebanyak 5 buah baris yang mengandung nama thread dan posisinya. Namun, sebelum informasi ditulis, pernyataan tersebut akan membuat thread tertidur selama 1 detik melalui pernyataan:



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");
            }

  • Tujuannya adalah memberi kesempatan yang lebih besar terhadap thread lain untuk diproses. Pada pernyataan diatas, try…catch digunakan untuk menangkap eksepsi kalau terjadi suatu interupsi ketika thread tertidur. 


  • Ketika sebuah thread tertidur, ia benar-benar tidak melakukan kegiatan apapun. 


  • Jadi pada saat itu thread tersebut tidak menggunakan CPU sama sekali. sleep() adalah metode pada kelas Thread (dan tentu saja diwariskan ke subkelas) yang berfungsi untuk membuat thread tertidur. Argumennya berupa nilai dalam satuan milidetik(1 detik sama dengan 1000milidetik). 


  • Hasil diatas menunjukkan bahwa proses untuk thread dengan nama BAJU-1 dan BAJU-2 dilakukan secara bergantian
output :

2. Runnable Object
                contoh 2 :
                           
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package coba.thread;

/**
 *
 * @author Imam Ghazali M
 */
public class CobaThreadRunnable {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Thread celana1 = new Thread(new Celana("Celana-1"));
        Thread celana2 = new Thread(new Celana("Celana-2"));
        celana1.start();
        celana2.start();
    }
}

class Celana implements Runnable {

    String nama;
// konstruktor
    public Celana(String id) {
        nama = id;
    }

    public void run() {
        for (int i = 0; i < 5; i++) {
            try {
                Thread.currentThread().sleep(1000);
            } catch (InterruptedException ie) {
                System.out.println("Terinterupsi");
            }
            System.out.println("Thread " + nama + ":Posisi" + i);
        }
    }}

Pembahasan Contoh 2 : 
  • Program diatas hampir sama dengan program CobaThread.java. Beberapa perbedaan yang perlu dibahas: 
  •  Pembuatan objek thread dilakukan melalui:
Thread celana1 = new Thread(new Celana("Celana-1"));
Thread celana2 = new Thread(new Celana("Celana-2"));
  • Perhatikan bahwa celana1 dan celana2 merupakan variable yang merujuk objek berkelas Thread. Pembentukan objek dilakukan dengan menggunakan kelas Thread dengan argument berupa objek berkelas Celana.
  •  Kelas Celana didefinisikan dengan mengimplementasikan interface Runnable seperti terlihat pada baris berikut: 
class Celana implements Runnable { 
  •   Di dalam kelas Celana dideklarasikan variabel instan bernama nama, yang digunakan untuk menyimpan nama thread. 
  • Di dalam konstruktor Celana, variabel instan bernama nama tersebut diisi dengan nilai agumen. Di dalam metode run(), mengingat sleep() adalah metode milik kelas Thread, pemanggilannya harus dilakukan dengan memlibatkan kelas tersebut. Seperti sintaks berikut:
Thread.currentThread().sleep(1000); Thread.currentThread().sleep(1000);
  • Dalam hal ini currentThread() adalah metode pada kelas Thread yang digunakan untuk memperoleh thread sekarang. 
output :


3 komentar: