Senin, 01 Agustus 2022

3.14.1 MENJELASKAN KONSEP DASAR INSTRUKSI THREAD DALAM PEMROGRAMAN APLIKASI BERORIENTASI OBYEK


Thread adalah rangkaian eksekusi dari sebuah aplikasi java dan setiap program java minimal

memiliki satu buah thread. Sebuah thread bisa berada di salah satu dari 4 status, yaitu new,

runnable, blocked, dan dead.

A. Status Thread

1. New

Thread yang berada di status ini adalah objek dari kelas Thread yang baru dibuat, yaitu

saat instansiasi objek dengan statement new. Saat thread berada di status new,belum ada

sumber daya yang dialokasikan, sehingga thread belum bisa menjalankan perintah

apapun.

2. Runnable

Agar thread bisa menjalankan tugasnya, method start() dari kelas Thread harus

dipanggil. Ada dua hal yang terjadi saat pemanggilan method start(), yaitu alokasi

memori untuk thread yang dibuat dan pemanggilan method run(). Saat method run()

dipanggil, status thread berubah menjadi runnable, artinya thread tersebut sudah

memenuhi syarat untuk dijalankan oleh JVM. Thread yang sedang berjalan juga berada di

status runnable.

3. Blocked

Sebuah thread dikatakan berstatus blocked atau terhalang jika terjadi blocking

statement, misalnya pemanggilan method sleep(). sleep() adalah suatu method yang

menerima argumen bertipe integer dalam bentuk milisekon. Argumen tersebut

menunjukkan seberapa lama thread akan “tidur”. Selain sleep(), dulunya dikenal method

suspend(), tetapi sudah disarankan untuk tidak digunakan lagi karena mengakibatkan

terjadinya deadlock. Thread akan menjadi runnable kembali jika interval method sleep()-

nya sudah berakhir, atau pemanggilan method resume() jika untuk menghalangi thread tadi

digunakan method suspend()

4. Dead

Sebuah thread berada di status dead bila telah keluar dari method run(). Hal ini bisa

terjadi karena thread tersebut memang telah menyelesaikan pekerjaannya di method

run(), maupun karena adanya pembatalan thread. Status jelas dari sebuah thread tidak

dapat diketahui, tetapi method isAlive() mengembalikan nilai boolean untuk mengetahui

apakah thread tersebut dead atau tidak.

.

B. Pembentukan Thread dalam java

Untuk membuat thread dalam java terdapat dua cara :

a. Extends class Thread

Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start()

dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat


LKPD PBO XII RPL GRAFIS


DASAR DESAIN GRAFIS KELAS X

thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini

adalah:

SubThread namaObject = new SubThread();

namaObject.start();

b. Implements interface Runnable

Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable

merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya

cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita

akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini

adalah :

MyThread myObject= new MyThread();

Thread namaObject = new Thread(myObject);

Atau dengan cara singkat seperti :

New Thread(new ObjekRunnable());

MyThread merupakan class yang mengimplementasikan interface dari Runnable, dan

object dari class MyThread akan menjadi parameter instansi object class Thread.

c. Synchronized

Sinkronisasi adalah method atau blok yang memiliki tambahan keyword

synchronized,sehingga apabila dijalankan maka hanya satu thread pada suatu waktu yang

dapat menjalankan method atau blok program. Thread lain akan menunggu thread yang

sedang mengeksekusi method ini hingga selesai. Mekanisme sinkronisasi penting apabila

terjadi pembagian sumber daya maupun data di antara thread-thread. Sinkronisasi juga

melakukan penguncian pada sumber daya atau data yang sedang diproses.

Sinkronisasi dapat dilakukan pada dua bagian yaitu

1. Sinkronisasi Blok

Sintak untuk sinkronisasi blok adalah sebagai berikut :

synchronized (<object reference expression>) {

<code block>

}

2. Sinkronisasi Method

Sintak untuk sinkronisasi method adalah sebagai berikut:

synchronized TypeBalikanMethod NamaMethod ( parameter)

{

}