MULTI - THREADI NG

8.7. MULTI - THREADI NG

8.7.1. Pengertian Thread

Sebuah thread merupakan sebuah pengontrol aliran program. Untuk lebih mudahnya, bayangkanlah thread sebagai sebuah proses yang akan dieksekusi di dalam sebuah program tertentu. Thread adalah suatu bagian program yang tidak tergantung pada bagian lain dan dapat dijalankan secara bersama-sama. Hal ini berarti suatu thread dapat diberhentikan atau diistirahatkan tanpa harus menghentikan yang lainnya. Pada Java setiap thread dikontrol oleh suatu obyek unik turunan Thread, yang didefinisikan di dalam paket java.lang.

Pada saat sebuah program Java dijalankan, sebenarnya terdapat satu thread yang secara otomatis dibuat. Thread ini biasa disebut sebagai thread utama. Thread ini merupakan induk dari dari thread-thread yang lain. Meskipun thread utama ini otomatis dijalankan tetapi kita dapat mengendalikannya melalui obyek Thread dengan memanggil method currentThread(). Perhatikan contoh berikut.

Contoh 8.19. Thread utama.

class ThreadUtama { public static void main(String[] args) throws InterruptedException {

// mendapatkan thread yang sedang aktif Thread tUtama = Thread.currentThread();

// menampilkan informasi tentang thread System.out.print("Informasi thread: "); System.out.println(tUtama.toString());

for (int i=0; i<5; i++) { System.out.println("Detik ke-" + (i+1)); Thread.sleep(1000); // membuat delay selama 1 detik

Pada contoh di atas, kita mendefinisikan thread dengan nama tUtama. Variabel ini kita gunakan untuk menangkap thread utama yang sedang berjalan pada program dengan perintah Thread.currentThread(). Kemudian informasi tentang thread ini kita tampilkan di layar. Pada baris yang dimulai dengan for, kita akan menggunakan perintah untuk mengontrol thread yang sedang berjalan. Kita menggunakan method sleep untuk mengontrol thread agar menunda pekerjaan selama 1 detik tiap kali pengulangan. Cobalah ketik kode di atas, kemudian jalankan. Kemudian coba hapus baris Thread.sleep(1000);. Jalankan lagi program. Apa yang berbeda?

Rekayasa Perangkat Lunak 191

8.7.2. Pembuatan dan Penggunaan Thread

Thread dapat dibuat dengan dua cara yaitu dengan membuat kelas baru yang menerapkan interface Runnable dan membuat kelas baru dengan menurunkan dari kelas Thread. Kedua cara tersebut membutuhkan paket java.lang. Secara default paket ini telah otomatis diimpor pada saat kita membuat program dengan Java.

Pada bagian ini kita hanya akan membahas cara pertama. Sedangkan cara kedua akan kita pelajari secara bersamaan pada bagian multi-thread.

Perhatikan contoh berikut. Contoh 8.20. Membuat thread dengan interface Runnable.

class TestRunnable implements Runnable { // mengimplementasikan method run() yang dideklarasikan // di dalam interface Runnable public void run() {

System.out.println("Thread anak dieksekusi"); } }

class PenerapanRunnable { public static void main(String[] args) {

// (LANGKAH KE-1): membuat objek Runnable TestRunnable obj = new TestRunnable();

// (LANGKAH KE-2): membuat objek Thread dengan melewatkan objek Runnable Thread t = new Thread(obj);

// (LANGKAH KE-3) : menjalankan thread t.start();

System.out.println("Thread utama dieksekusi"); } }

Pada contoh di atas kita membuat lebih dulu kelas TestRunnable yang

menerapkan Runnable (perhatikan baris class TestRunnable implements

Runnable dan blok kode dibawahnya). Kemudian kita membuat obyek

TestRunnable dari kelas tersebut (lihat pada baris TestRunnable obj = new

TestRunnable() ). Obyek ini kita gunakan untuk membuat thread baru

dengan cara menggunakan constructor kelas thread (lihat baris Thread t =

new Thread(obj) ). Setelah terbentuk maka kita dapat menjalankan thread tersebut (lihat baris t.start() ).

192 Rekayasa Perangkat Lunak

8.7.3. Multi- Thread

Pada contoh 8.19 dan 8.20, kita hanya berhubungan dengan satu dan dua thread. Namun sesungguhnya Java member kemungkinan untuk membuat lebih dari dua thread. Kondisi ini dinamakan sebagai Multi-thread. Coba kalian perhatikan contoh berikut ini.

Contoh 8.21. Membuat multi-thread.

class MyThread1 extends Thread { public void run() { try { for (int i=0; i<10; i++) { System.out.println("Thread pertama: detik ke-" + (i+1)); if (i != 9) { sleep(1000); } else { System.out.println("Thread pertama selesai...\n"); } } } catch (InterruptedException ie) { System.out.println(ie.getMessage()); } } }

class MyThread2 extends Thread { public void run() { try { for (int i=0; i<5; i++) {

System.out.println("Thread kedua: detik ke-" + (i+1)); if (i != 4) { System.out.println(); sleep(1000);

} else { System.out.println("Thread kedua selesai...\n"); } } } catch (InterruptedException ie) { System.out.println(ie.getMessage()); } } }

class DemoMultipleThread { public static void main(String[] args) {

MyThread1 t1 = new MyThread1(); t1.start();

Rekayasa Perangkat Lunak 193

MyThread2 t2 = new MyThread2(); t2.start();

Kode program di atas menunjukkan bagaimana membentuk dua buah

thread. Thread yang pertama kita buat melalui pembuatan kelas MyThread1

dengan cara menurunkan kelas Thread. Cara ini adalah cara kedua membuat thread yang kita singgung di bagian sebelumnya. Thread kedua dengan nama kelas MyThread2 juga kita buat dengan cara yang sama. Kemudian pada class DemoMultipleThread kita membuat obyek t1 dari kelas MyThread1 dan obyek t2 dari kelas MyThread2. Apabila dijalankan, kode program di atas akan tampak seperti pada Gambar 8.12.

Gambar 8.12. Hasil eksekusi multi-thread.

Dokumen yang terkait

ANALISIS KESESUAIAN ANTARA RENCANA PEMBANGUNAN JANGKA MENENGAH DAERAH 2010-2015 DENGAN ALOKASI DANA, PROGRAM, DAN CAPAAN PROGRAM SATUANKERJA PERANGKAT DAERAH (Studi pada Kabupaten Jember)

1 28 68

ANALISIS KINERJA SIMPANG MENGGUNAKAN PERANGKAT LUNAK KAJI DAN PTV VISTRO (STUDI KASUS : SIMPANG BERSINYAL DAN TAK BERSINYAL PERKOTAAN JEMBER)

5 45 18

ANALISIS PENGARUH PERSEPSI PENERAPAN TRANSPARANSI DAN AKUNTABILITAS PUBLIK TERHADAP KINERJA SATUAN KERJA PERANGKAT DAERAH (Studi Empiris Pada Pemerintah Daerah Kabupaten Bondowoso)

1 31 18

ANALISIS PENGARUH PERSEPSI TRANSPARANSI DAN AKUNTABILITAS TERHADAP KINERJA LAYANAN PUBLIK SATUAN KERJA PERANGKAT DAERAH KABUPATEN BANYUWANGI

1 32 18

ANALISIS PENGARUH PERSEPSI TRANSPARANSI DAN AKUNTABILITAS TERHADAP KINERJA LAYANAN PUBLIK SATUAN KERJA PERANGKAT DAERAH KABUPATEN BANYUWANGI

19 247 18

PERANGKAT PEMBELAJARAN RENCANA PELAKSANAAN RENCANA PELAKSANAAN PEMBELAJARAN PEMBELAJARAN5

0 39 600

PERANGKAT PEMBELAJARAN RENCANA PELAKSANAAN RENCANA PELAKSANAAN PEMBELAJARAN PEMBELAJARAN 4

0 30 284

PENGUJIAN PERANGKAT LUNAK PADA SISTEM INFORMASI RAPOR ONLINE MENGGUNAKAN METODE BLACKBOX TESTING DENGAN TEKNIK EQUIVALENCE CLASS PARTITIONING

3 38 23

PENGEMBANGAN APLIKASI CLIENT E-LEARNING UNTUK LEARNING MANAGEMENT SYSTEM (LMS) CLAROLINE PADA PERANGKAT MOBILE ANDROID

2 27 29

HUBUNGAN KEPEMIMPINAN KEPALA DESA DENGAN EFEKTIVITAS KERJA PERANGKAT DESA (Studi Pada Pemerintah Desa Talang Bojong Kecamatan Kotabumi Kota Kabupaten Lampung Utara)

0 25 90