Mudah Memahami Java Thread

Mudah Memahami Java Thread

ilustrasi memahami java thread

Sebagian dari kita mungkin sudah pernah mendengar istilah aplikasi multi threading. Sebagian kecil dari kita mungkin sudah pernah membuat aplikasi multi threading. Biasanya aplikasi jenis ini dipakai dalam kasus yang cukup komplek dan memerlukan pengetahuan yang cukup mendalam tentang konsep concurrent access, synchronizing dan sejenisnya, karena itulah masih jarang programmer yang paham dengan konsep multi threading. Padahal konsep ini sangat bagus untuk dipahami untuk menambah kemampuan dan wawasan. Pada kesempatan kali ini kita mencoba memahami multi threading dengan cara yang paling sederhana sehingga mudah dimengerti.

Pengertian Thread

Kita mencoba membuat definisi yang lebih sederhana dan aplikatif untuk menjelaskan pengertian thread. Thread itu dapat dianalogikan sebagai seorang pekerja dalam sebuah pekerjaan. Sebagai contoh satu orang kasir itu adalah seorang pekerja. Seorang pekerja dapat melakukan pekerjaan secara berurutan. Sebagai contoh pekerjaan kasir adalah menerima pembayaran dari pembeli yang sedang antri. Seorang kasir melayani antrian pembeli secara berurutan satu per satu.

Pernahkah kita memakai thread ?. Ini adalah pertanyaan menarik sebab jawabannya adalah semua programmer yang pernah coding Java pasti pernah memakai thread. Secara tidak sadar semua programmer Java pasti memakai thread. Sebab kita otomatis membuat satu thread dalam fungsi utama coding Java. Thread yang kita buat dalam fungsi utama tersebut sering disebut dengan main thread.

public static void main(String[] args) {
 // disini kita otomatis membuat main thread
}

Main thread adalah pekerja utama dalam program Java, dia yang akan mengeksekusi setiap baris coding yang kita buat dalam fungsi utama. Main thread juga akan mengeksekusi fungsi lain yang dipanggil dari fungsi utama.

public static void main(String[] args) {
    System.out.println("Nama thread utama : " + Thread.currentThread().getName());
}

Setiap thread mempunyai nama, kita bisa mencetak nama thread utama dengan memakai coding dibawah ini.

Sekarang mari kita analogikan thread utama dengan seorang kasir. Thread utama atau kasir ini akan melayani pembelian dari 12 orang pembeli secara berurutan.

	public static void main(String[] args) {
		String namaThreadUtama = Thread.currentThread().getName();
		System.out.println("Nama thread utama : " + namaThreadUtama);
		
		// melayani 12 pembeli secara berurutan
		for (int pembeli = 1; pembeli <= 12; pembeli++) {
			System.out.println(namaThreadUtama + " melayani pembeli nomor " + pembeli);
		}
	}

Kalau coding diatas kita jalankan maka didapatkan hasil sebagai berikut.

Nama thread utama : main
main melayani pembeli nomor 1
main melayani pembeli nomor 2
main melayani pembeli nomor 3
main melayani pembeli nomor 4
main melayani pembeli nomor 5
main melayani pembeli nomor 6
main melayani pembeli nomor 7
main melayani pembeli nomor 8
main melayani pembeli nomor 9
main melayani pembeli nomor 10
main melayani pembeli nomor 11
main melayani pembeli nomor 12

Kita lihat bahwa thread utama melayani pembeli satu persatu secara berurutan. Total satu kasir melayani 12 pembeli. Bagaimana caranya kita bisa membagi 12 pembeli ini dalam 2 kasir sekaligus agar satu kasir hanya melayani 6 pembeli sehingga antrian jadi lebih pendek ?. Jawabannya adalah dengan membuat thread baru selain thread utama dan kita masuk kedalam konsep multi threading.

Konsep Multi Threading

Multi threading bisa dianalogikan dengan membuat beberapa orang pekerja sekaligus untuk melakukan beberapa pekerjaan sekaligus secara paralel. Satu orang pekerja adalah satu thread, banyak pekerja adalah multi threading. Dengan memakai studi kasus kasir diatas, maka kita harus membuat thread baru yang akan melayani pembeli nomor 7 sampai 12. Kasir lama (main thread) akan melayani pembeli nomor 1 sampai 6. Bagaimana cara membuat thread baru ? Perhatikan contoh coding dibawah ini.

public class KasirBaru implements Runnable {

	@Override
	public void run() {
		// kasir baru melayani pembeli nomor 7 sampai 12
	}

}

Kasir atau thread baru dapat dibuat dengan membuat satu class yang implements interface Runnable. Dalam interface Runnable kita mempunyai satu fungsi public void run, fungsi inilah yang akan jadi titik awal eksekusi suatu pekerjaan pada thread yang baru. Kita memang perlu sedikit paham tentang konsep OOP dan interface untuk memahami ini, Nextgen menyediakan kursus java yang dapat membantu pesertanya paham lebih detil tentang konsep OOP.

Seperti juga pada main thread, kita juga bisa mendapatkan nama thread baru. Kemudian kita akan melayani pembeli nomor 7 sampai 12.

public class KasirBaru implements Runnable {

	@Override
	public void run() {
		String namaThreadBaru = Thread.currentThread().getName();
		System.out.println("Nama thread baru : " + namaThreadBaru);
		
		// kasir baru melayani pembeli nomor 7 sampai 12
		for (int pembeli = 7; pembeli <= 12; pembeli++) {
			System.out.println(namaThreadBaru + " melayani pembeli nomor " + pembeli);
		}
	}

}

Sekarang bagaimana cara membuat thread baru ini dijalankan ?. Perhatikan contoh coding dibawah ini.

Thread kasirBaru = new Thread(new KasirBaru());
kasirBaru.start();

Cara menjalankan thread baru adalah dengan membuat satu object thread dengan menggunakan constructor yang menerima parameter class yang implement Runnable. Dalam kasus kita class tersebut adalah KasirBaru. Kemudian kita menjalankan fungsi start() pada object thread tersebut.

Sekarang kita akan menjalankan thread baru (kasir baru) tersebut melalui main thread. Kemudian secara paralel main thread (kasir lama) akan melayani pembeli nomor 1 sampai 6.

	public static void main(String[] args) {
		String namaThreadUtama = Thread.currentThread().getName();
		System.out.println("Nama thread utama : " + namaThreadUtama);
		
		Thread kasirBaru = new Thread(new KasirBaru());
		kasirBaru.start();
		
		// kasir lama melayani pembeli nomor 1 sampai 6
		for (int pembeli = 1; pembeli <= 6; pembeli++) {
			System.out.println(namaThreadUtama + " melayani pembeli nomor " + pembeli);
		}
	}

Kalau coding diatas dijalankan maka hasilnya adalah mirip seperti dibawah.

Nama thread utama : main
main melayani pembeli nomor 1
main melayani pembeli nomor 2
Nama thread baru : Thread-0
main melayani pembeli nomor 3
main melayani pembeli nomor 4
Thread-0 melayani pembeli nomor 7
Thread-0 melayani pembeli nomor 8
Thread-0 melayani pembeli nomor 9
main melayani pembeli nomor 5
Thread-0 melayani pembeli nomor 10
Thread-0 melayani pembeli nomor 11
Thread-0 melayani pembeli nomor 12
main melayani pembeli nomor 6

Kenapa kita bilang mirip ? Karena bisa jadi urutannya berbeda. Baik kasir lama ataupun kasir baru melayani antrian masing-masing secara berurutan. Tapi kasir lama dan kasir baru melakukan pekerjaannya secara terpisah dan paralel. Itulah sebabnya ada kemungkinan urutan pengerjaan semua pembeli bisa berbeda-beda.

Bagi yang ingin mendapatkan source code lengkap dapat diakses melalui https://github.com/PT-Nextgen/ng-javathread. Silahkan cek juga kursus programming lain dari Nextgen apabila tertarik untuk menambah kemampuan coding.

Sekian dulu topik Thread dalam artikel ini, semoga bisa bermanfaat untuk menambah kemampuan coding Java kita semua.

Tentang Penulis

Tinggalkan Balasan