Thread Pada Java

Thread Pada Java

Java Thread #

Thread memungkinkan sebuah program untuk beroperasi lebih efisien dengan melakukan banyak hal pada satu waktu. Thread dapat digunakan untuk melakukan tugas rumit sebagai proses yang berjalan sebagai latar belakang tanpa mengganggu program utama.

Membuat Sebuah thread #

Terdapat dua cara membuat sebuah thread. Bisa dibuat dengan membuat sub class dari class Thread dan mengganti method run() :

public class Main extends Thread {
    public void run() {
        System.out.println("Kode ini berjalan di dalam sebuah thread");
    }
}

Cara lain untuk membuat sebuah thread adalah dengan membuat sebuah class yang implements interface Runnable :

public class Main implements Runnable {
    public void run() {
        System.out.println("Kode ini berjalan di dalam sebuah thread");
    }
}

Menjalankan thread #

Jika menggunakan class sebagai sub class dari class Thread, thread dapat dijalankan dengan membuat instance class dan memanggil method start() :

public class Main extends Thread {
    public static void main(String[] args) {
        Main thread = new Main();
        thread.start();
        System.out.println("Kode ini berjalan di luar thread");
    }

    public void run() {
        System.out.println("Kode ini berjalan di dalam thread");
    }
}

Output :

Kode ini berjalan di luar thread
Kode ini berjalan di dalam thread

Jika menggunakan class yang implement interface Runnable, thread dapat dijalankan dengan meneruskan instance class ke constructor object Thread dan memanggil method start(). Contoh :

public class Main implements Runnable {
    public static void main(String[] args) {
        Main obj = new Main();
        Thread thread = new Thread(obj);
        thread.start();
        System.out.println("Kode ini berjalan di luar thread");
    }

    public void run() {
        System.out.println("Kode ini berjalan di dalam thread");
    }
}

Output :

Kode ini berjalan di luar thread
Kode ini berjalan di dalam thread

Perbedaan Antara Extends Dan Implements Pada Thread #

Perbedaan utama adalah ketika menggunakan sub class dari class Thread maka Anda tidak dapat menggunakan extends dari class yang lainnya, tapi dengan menggunakan implement interface Runnable, memungkinkan untuk membuat sub class dari class lain juga, seperti contoh class ClassSaya extends ClassLain implements Runnable.

Masalah Concurrency #

Karena thread berjalan pada saat yang sama dengan bagian lain dari program, tidak ada cara untuk mengetahui urutan kode yang akan dijalankan. Ketika thread dan program utama membaca dan menulis variabel yang sama, nilainya tidak dapat diprediksi. Masalah yang dihasilkan ini disebut masalah concurrency. Contoh, nilai dari variabel jumlah di bawah ini tidak bisa diprediksi :

public class Main extends Thread { 
    public static int jumlah = 0;

    public static void main(String[] args) {
        Main thread = new Main();
        thread.start();
        System.out.println(jumlah);
        jumlah++;
        System.out.println(jumlah);
    }

    public void run() {
        jumlah++;
    }
}

Output :

0
1

Untuk menghindari masalah konkurensi, cara terbaik adalah berbagi atribut sesedikit mungkin di antara thread. Jika atribut perlu untuk dibagikan, salah satu solusi yang mungkin adalah menggunakan method isAlive() dari thread untuk memeriksa apakah thread telah selesai berjalan sebelum menggunakan atribut apa pun yang dapat diubah oleh thread. Contoh di bawah ini menggunakan method isAlive() untuk mencegah masalah concurrency :

public class Main extends Thread {
    public static int jumlah = 0;
 
    public static void main(String[] args) {
        Main thread = new Main();
        thread.start();
        // Menunggu thread selesai
        while(thread.isAlive()) {
            System.out.println("Menunggu...");
        }
        // Update jumlah dan mencetak nilai
        System.out.println("Main: " + jumlah);
        jumlah++;
        System.out.println("Main: " + jumlah);
    }
    
    public void run() {
        jumlah++;
    }
}

Output :

Menunggu...
Menunggu...
Menunggu...
Menunggu...
Menunggu...
Main: 1
Main: 2

Tinggalkan Balasan

Keranjang Belanja0
Keranjang belanja kosong ...
0