Anda di halaman 1dari 18

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

TUGAS 2
PEMOGRMAN BERBASIS JARINGAN

BAB 5

JAVA MULTITHREADING
Oleh

KELOMPOK 5
97860 HARRY AKBAR 97858 SILVANI 97865 WINANDA AMILIA 97863 AMELIZA DESTI 97861 MUHAMMAD IKHSAN 97867 AGUNG YUDHA PRAWIRA

Program Studi Pend. Teknik Informatika dan Komputer

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

Jurusan Elektronika Fakultas Teknik Universitas Negeri Padang 2012


Mata Kuliah Dosen Pembina Topik : Pemrograman Berbasis Jaringan : Muhammad Adri, S.Pd, MT Kode Mata Kuliah Jumlah SKS Waktu : TIK 137 : 2 SKS

: JAVA MULTITHREADING

: 3 x 50 Menit

A.

TUJUAN 1. Mahasiswa mampu menjelaskan tentang java multithreading 2. Mahasiswa mampu membuat Thread sederhana 3. Mahasiswa mampu membuat Thread dengan sinkronisasi

B.

TEORI SINGKAT 1. Mengenal Multithreading

Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi atau proses dapat dijalankan secara bersamaan dalam sebuah program. Satu kumpulan instruksi yang akan dieksekusi secara independen dinamakan thread. Thread sangat berguna untuk membuat proses yang interaktif; misalnya pada permainan (game). Dengan menggunakan sejumlah thread, program tetap dapat menggerakkan sejumlah objek sembari memberikan kesempatan pemakai untuk melakukan tanggapan melalui keyboard. Web browser merupakan contoh lain penggunaan thread. Tanpa thread, Web browser akan menghentikan segala tanggapan terhadap pemakai ketika perangkat lunak tersebut sedang mengambil isi dari suatu URL. Sebagai applikasi java baik akan mempunyai semua ilustrasi, setiap membuat desktop maupun console thread aktifitas utama yang yang akan

menangani

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

dilakukan. Apabila kita menginginkan applikasi ini menjalani beberapa pekerjaan misalnya task 1, task 2, task 3, kita membuat beberapa thread untuk mengeksekusi pekerjaan tersebut. Sebagai ilustrasi, perhatikan gambar berikut:

Pada gambar diatas dapat disimpulkan bahwa, applikasi utama membuat tiga thread untuk mengeksekusi tiga pekerjaan secara bersamaan, dan dalam hal ini, thread utama dapat mengontrol jika terjadi kegagalan thread. Dalam implementasi pada jaringan, suatu thread dapat digunakan untuk mengeksekusi suatu pekerjaan seperti menunggu paket data jaringan yang masuk, sedangkan thread lain mngeksekusi GUI untuk berinteraksi dengan user. Untuk lebih jelasnya tentang java multi threading ini, mari kita ikuti kegiatan praktikum berikut ini.
2. Mengenal objek thread Objek thread berada pada pakage.java.util dan beberapa method yang banyak digunakan dalam memanfaatkan objek ini. Berikut ini beberapa method pada objek thread: Nama Method getName() setName(String name) Interrupt() IsAlive() IsDaemon setDaemon(Bolean on) Kegunaan Untuk memperoleh informasi nama thread Untuk mengisi nama thread Melakukan interupsi pada thread Mengecek apakah thread masih hidup atau tidak Mengecek apakah thread daemon atau tidak Memberikan tanda bahwa thread berbentuk daemon atau tidak

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

isInterrupted() join() setPriority(int newPriority) getPriority() Start()

Mengecek apakah thread diinterupsi atau tidak Menunggu thread mati Mengubah priority thread Mengambil informasi prioritas thread Menjalankan thread

3. KONSTRUKSI THREAD Dalam melakukan konstruksi thread, kita dapat langsung meletakan objek target yang akan dieksekusi. Objek target harus mengimplementasi interface runnable, contohnya seperti listing berikut, Public class MyTargetThread implements Runnable { Public void run() { //implementasi method run } } Ketika onject thread dikonstruksi, kita dapat langsung memasukan kedalam objek thread. Berikut ilustrasi listingnya Thread thread1 = new Thread(new MyTargetThread() ); Kita juga dapat memberikan nama thread ketika konstruksi seperti contoh kode program ini, dimana thread diberi nama thread1: Thread thread1 = new Thread(new MyTargetThread(), Thread1);

4. MENJALANKAN THREAD Untuk menjalankan thread kita dapat memanfaatkan method start() dari objek Thread. Berikut contoh listingnya: Thread thread1 = new Thread(new MyTargetThread() ); Thread1.start();

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

5. MENGHENTIKAN THREAD Thread berjalan sendiri tanpa harus melakukan interferensi , namun adakalanya thread ini harus dihentikan. Untuk menghentikan thread ada dua cara yang dapat dilakukan, diantaranya 1. Memaksa thread tersebut untuk di bunuh melalui thread utama 2. Menunggu thread tersebut untuk mematikan diri sendiri

6. INFORMASI THREAD Setiap thread yang berjalan kita dapat melakukan monitoring apakah suatu thread itu masih hidup atau tidak.Ini dapat dilakukan dengan memanfaatkan method isAlive ()dari objek thread. Berikut ini ilustrasi kode programnya: Thread thread = new Thread (new MyTask()); Thread.start(); ... If (thread.isAlive()) System.out.println(Thread Masih Hidup); Kita juga dapat memperoleh informasi thread id dan namanya dengan memanfaatkan getid() dan getName() dari objek Thread.Berikut ini ilustrasi kode programnya. System.out.println(Nama thread= + thread.getname()); System.out.println(Thread id= + thread.getId()); 7. THREAD DENGAN EXECUTOR FRAMEWORK Kita sudah mempelajari bagaimana membuat Thread dengan menggunakan objek Thread dan kelas yang akan dieksekusi oleh objek Thread harus mengimplentasi interface Runnable.Sekarang kita akan mempelajari alternatif lain bagaimana membuat thread.Salah satu caranya adlah memanfaatkan executor framework. Executor framework menggunakan thread pool untuk mengeksuki thread.Realisasi eksekutor framework menggunakan interface ExecutorService yang berada pada

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

package java.until.concurrent. Objek interfac ExecutorService diistansiasi dengan menggunakan objek Executors.

8. MENGENAL OBJEK TIMER Kadangkala kita menginginkan suatu aksi yang terus menerus dilakukan pada suatu periodik tertentu tanpa mengganggu aplikasi utama.Hal ini dapat dilakukan dengan memanfaatkan objek timer yang berada pada package java.util.timer.Untuk

mengeksekusi aksi yang akan dieksekusi oleh objek Timer,kita harus membuat kelas yang mengimplementasi objek TimerTask.Sedangkan kelas TimerTask mengimplementasi interface Runnable. Pada objek timer task,kita harus melakukan override method run() untuk implementasi interface Runnable dan selanjutnya didalam method run() ini kita menulis kode program sesuai yang diinginkan.

9. SINKRONISASI THREAD Setiap thread yang kita buat akan berjalan secara otomatis tanpa interfensi dari kita.Pada kondisi tertentu thread yang kita buat mungkin akan mengakses suatu resource seperti data variabel atau file.Jika hanya ada satu thread maka ini tidak ada masalah tapi jika threadnya lebih dari satu maka ini akan menjadi masalah karena mengakses resource secara bersama akan menimbulkan error.Oleh karena itu,kita harus memerlukan sinkronisasi antar thread dalam mengakses suatu thread. 10. TEKNIK SINKRONISASI THREAD

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

Pada java kita memerlukan banyak sekali teknik membuat sinkrinisasi.Cara yang paling mudah yaitu dengan memanfaatkan synchronized.Ini dapat digunakan pada level method atau bebas pada kode program.Contoj pada program synchronized ilustrasinya sebagai berikut: Synchrinized(this){ //kode program Kode program diatas,kita meletakkan proses yang akan disinkrinisasidalam blok{}. Cara synchronized juga dapat digunakan pada level method.Berikut ilustrasinya: Public synchronized void doSomething(){ }

C.

KEGIATAN PRAKTIKUM 1. MEMBUAT THREAD SEDERHANA Pada java kita dapat memanfaatkan kelas thread untuk membuat applikasi yang memanafatkan system threading. Kelas thread berada pada pakage java. Lang dan kelas ini mengimplementasi interface runable. Setiap objek thread yang dibuat, kita harus membuat kelas yang mengimplementasi interface runnable. Sebagai contoh, buatlah kelas MyThread dengan implementasi interface runnable pada method run () berdasarkan listing program berikut import java . util . Calender; import java.text.SimpleDateFormat; public class MyThread implements Runnable { public void run() { Try { while (true) { Calendar cal = Calendar.getInstance(); SimpleDateFormat dt = new SimpleDateFormat (dd-mm-yy HH:mm:ss); System.out.println (Run on + dt. format (cal.getTime() ) ); Thread.sleep (1000); } } Catch (exception ex) { }

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

} } Pada kode diatas kita hanya dapat menampilkan tulisan, dan waktu saat tulisan tersebut ditampilkan. Sedangkan cara menampilkan entri point dapat dilakukan dengan cara instansiasi kedalam mythread pada objek runnable. Selanjutnya objek ini akan dimasukan kedalam konstruktor objek thread . untuk menjalankan objek thread ini, dapat dilakukan dengan cara memanggil method start(), seperti listing berikut:

Public class main { Public static void main(String[] args) { Runnable obj = new MyThread(); Thread thread1 = new Thread(obj); Thread1.start(); } } Hasilnya dapat dilihat dalam simple thread.jar seperti gambar berikut:

2.

MENGHENTIKAN THREAD Seperti yang telah dijelaskan pada materi diatas, thread berjalan sendiri tanpa harus melakukan interferensi , namun adakalanya thread ini harus dihentikan. Untuk menghentikan thread ada dua cara yang dapat dilakukan, diantaranya : Menghentikan thread dengan menggunkan method interrupt() import java . util . Calender;

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

import java.text.SimpleDateFormat; public class LoopingTask implements Runnable { public void run() { Try { while (true) { Calendar cal = Calendar.getInstance(); SimpleDateFormat dt = new SimpleDateFormat (dd-mm-yy HH:mm:ss); System.out.println (LoopingTask run dt. format (cal.getTime() ) ); Thread.sleep (1000); } } Catch (exception ex) { } } } on +

Sedangkan penggunaan looping task pada thread dapat diilustrasikan dalam listing berikut: LoopingTask task1 = new LoopingTask(); Thread thread1 = new Thread (task1) ; Thread1.start(); Try { Thread.sleep (2000); thread1.interrupt(); } Catch (exception ex) { System.out.println (ex.getMessage () ); } Kode thread sleep (2000) digunakan untuk memberi penundaaan selama 2 detik sebelum thread di interrupt(). Contoh hasil eksekusi:

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

Menghentikan thread dengan menunggu thread mematikan diri sendiri import java . util . Calender; import java.text.SimpleDateFormat; public class SmartTask implements Runnable { private Boolean isFinish = false; public void setFinish (Boolean finish){ isFinish = finish ; } Public void run() { Try{ While(!isFinish) { Calendar cal = Calendar.getInstance(); SimpleDateFormat dt = new SimpleDateFormat (dd-mm-yy HH:mm:ss); System. Out.println (SmartTask runs on + dt. Format (cal.getTime() )); Thread sleep (1000); } } }

Penambahan isFinish sebagai indicator apakah looping akan dilanjutkan atau tidak, nilai isFinish akan diupdate melalui method setFinish().
SmartTask task2 = new SmartTask(); Thread thread2 = new Thread (task2); Thread2.start(); try{ Thread.sleep(2000); task2.setFinish(true); thread2.join(2000); }catch (Exception ex) { System. Out. Println(ex.getMessage() ); } Hasil eksekusi seperti gambar berikut :

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

3. THREAD DENGAN EXECUTOR FRAMEWORK Sebagai ilustrasinya kita memanfaatkan kelas MyThread pada subbab 5.2 dan selanjutnya objek ini dieksekusi dengan memanfaatkan executor framework.Berikut contoh programnya. MyThread task1 = nem MyThread(Task1); MyThread tas2k = nem MyThread(Task2); MyThread task3 = nem MyThread(Task3); ExecutorService executor = Executors.newCachedThreadPool(); executor.execute(task1); executor.execute(task2); executor.execute(task3); executor.shutdown(); Eksekusi objek ExecutorService dengan memanggil method execute().Kemudian ini diakhiri penggunaan objek ExecutorService dengan memanggil method shutdown(). Contoh hasil eksekusi ini dapat dilihat pada gambar :

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

4. MENGENAL OBJEK TIMER Pada objek timer task,kita harus melakukan override method run() untuk implementasi interface Runnable dan selanjutnya didalam method run() ini kita menulis kode program sesuai yang diinginkan.Contoh ilustrasinya dapay dilihat dilihat dibawah ini: import java.util.TimerTask; import java.util.Calendar; import java.text.SimpleDateFormat; public class MyTask extends TimerTask{ @Override Public void run() { Calendar cal = Calendar.getInstance(); SimpleDateFormat dt = New SimpleDateFormat (dd-MM-yyyy HH:mm:ss); Sistem.out.println(My Task on + dt.format(cal.getTime())); //System.exit(0); } } Sedangkan untuk menggunakan objek Timer dan TimerTask cukup mudah.Mula-mula kita melakukan instansiasi objek TimerTask.Ilustrasi kode programnya sebagai berikut: Timer tm = new Timer(); tm.schedule(new MyTask(),0,1000); Contoh hasil eksekusi kode program diatas dapat dilihat:

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

5.

SINKRONISASI THREAD Sebagai ilustrasi misalkan kita mempunyai suatu kelas baru yaitu Counter yang dideklarasi sebagai berikut: Interface Counter { Public abstract void increment (String sender); Public abstract void increment (String sender); } Objek Counter bertipe interface yang memiliki method yang dapat menaikkan nilai atau menurunkan nilainya melalui method decrement(). Kemudian kita membuat kelas yang mengimplementasi interface Counter yaitu kelas UnSynchCounter dan realisasinya dalam kode program sebagai berikut: import java.until.Random; public clas UnSynchCounter implements Counter { private final static Random random = new Random(); private int val =0; public void increment (String sender){ int last = val; try{ Thread.sleep(random.nextInt(500)); }catch (InterruptedException ex){ System.out.println(ex.getMessage()); System.out.println(ex.getMessage()); } Val++; System.out.println(sender + -Inc\tLast; + last + :\tNew: +val: } public void decrement (String sender){ int last = val ; try{ Thread.sleep(randoom.nextInt(500)); }catch (InterruptedException ex) { System.out.println(ex.getMessage()); val--; System.out.println(sender +-Dec\tLast: +Last +\tNew: +val); } } increment() dan

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

Selanjutnya kita membuat dua kelas yaitu MyTaskA dan MyTaskB yang mengimplementasi interface Runnable.Kedua objek ini memanfaatkan objek Counter pada method run().Pada objek My TaskA kita memanggil method increment() dan objek MyTaskB memanggil method decrement() dari objek counter.Ilustrasi kode program objek MyTaskA dan MyTaskB sebagai berikut: import java.itil.Random; public class MyTaskA implements Runnable[ private final static Random random = new Random(); private final Counter sharesCounter; private String threadName; public MyTaskA (String name, Counter shared){ threaname = shared; } public viod run(){ for(int i=0;i<3;i++){ try{ sharedCounter.increment(threadName); }catch(Exception exp){ System.out.println(exp.getMessage()); } } } } public class MyTaskB implements Runnable[ private final static Random random = new Random(); private final Counter sharesCounter; private String threadName; public MyTaskA (String name, Counter shared){ threaname = shared; } public viod run(){ for(int i=0;i<3;i++){ try{ sharedCounter.increment(threadName); }catch(Exception exp){ System.out.println(exp.getMessage()); } } } } Kemudian kita mengeksekusi objek MyTaskA dan MyTaskB dengan memanfaatkan executor framework.

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

Mula-mula kita melakukan instasiasi objek Counter dengan memberikan instance objek UnSynshCounter dan dilanjutkan untuk instansiasi objek ExecutorService.Melalui objek ExecutorService kita mengeksekusi thread dengan memanggil method execute () yang disertai dengan

parameter objek MyTaskA dan MyTaskA.Berikut ini realisasi kode programnya: import java.util.coccurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { System.out.println (Demo thread tanpa sinkronisasi); Counter shared = new UnSynchCounter(); ExecutorService app = Executors.newChacedThreaPool(); app.execute {new MyTaskA(Thread1,shared)); app.execute {new MyTaskB(Thread2,shared)); app.execute {new MyTaskA(Thread3,shared)); app.shutdown(); } } Kalau ini dijalankan kita akan memperoleh hasilnya seperti berkut:

Pada keadaan ini objek Counter diakses secara acak oleh thread MyTaskA dan MyTaskB .Kalau kita memperhatikan hasil eksekusi tadi,kita melihat baris ke 4 di sana Thread3-Inc awal nilainya 0 dan hasil increment menunjukkan nilai 2 padahal nilainya harus 1.Hal ini disebabkan karena thread lain mengakses objek Counter ini,padahal proses ini belum selesai.Untuk mengatasi ini,,kita memerlukan proses sinkronisasi untuk memastikan bahwa objek Counter hanya diakses satu thread.

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

6. CONTOH SINKRONISASI THREAD

Berikut ini ilustrasi kode program kelas SynchCounter.


import java.util,random; Public class SynchCounter implements Counter{ private final static random = new Random(); private int val = 0; public synchronized void increment(String Sender){ int last = val; try} thread.sleep(random.nextInt(500)); }catch (InterruptedException ex) { system.out.println(ex.getMessage()); } val++; system.out.println (sender +-Inc\tLast: +last + \tNew: +val); } public synchronized void increment(String Sender){ int last = val; try} thread.sleep(random.nextInt(500)); }catch (InterruptedException ex) { system.out.println(ex.getMessage()); } val++; system.out.println (sender +-Inc\tLast: +last + \tNew: +val); } } Di sini kita melakukan sinkronisasi level method pada increment() dan decrement() dengan menggunakan synchronized.Sedangkan kelas MyTaskA dan MyTaskB tidak mengalami perubahan.Cara penggunaan berubah menjadi sebagai berikut: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main{ public static void main (String[] args){ //dengan synch] system.out.println(Demo thread dengan sinkronisasi); Counter shared = new SynchCounter(); ExecutorService app = Executors.newCachedThreadPool(); app.execute(new MyTaskA(Thread1,shared)); app.execute(new MyTaskB(Thread2,shared)); app.execute(new MyTaskA(Thread3,shared)); app.shutdown();

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

} } Kalau kita jalankan maka kita memperoleh hasil seperti dibawah ini:

FAKULTAS TEKNIKUNIVERSITAS NEGERI PADANG JURUSAN TEKNIK ELEKTRONIKA

PROGRAM STUDI PENDIDIKAN TEKNIK INFORMATIKA


Jl. Prof. Hamka Kampus Pusat UNP Air Tawar Padang, Telp. 0751-444614, Email : elektronika @ft.unp.ac.id

D.

TUGAS DAN LATIHAN

1. Buatlah kesimpulan mengenai multithreading pada bahasa pemrograman JAVA yang telah dipraktekkan beserta dengan program-program yang telah dibuat berikut tampilan hasilnya. 2. Setiap thread dalam Java memiliki prioritas. Defaultnya, suatu thread menurunkan prioritas dari thread induknya atau dapat menaikkan/menurunkan prioritas setiap thread. kelas Thread menyediakan metode setPriority() dengan argument berupa angka yang prioritas antara MIN_PRIORITY(didefinisikan sebagai 1 dalam kelas Thread) dan MAX_PRIORITY ( didefinisikan sebagai 10). NORM_PRIORITY didefinisikan sebagai 5. Jalankanlah listing program berikut, dan kemukakan output program yang didapat ! // nama file : UjiPrioritas.java public class UjiPrioritas { public static void main (String [] args) { Mobil m1 = new Mobil("M-1"); Mobil m2 = new Mobil("M-2"); m2.setPriority(8); m1.start(); m2.start(); } } class Mobil extends Thread { // konstruktor public Mobil (String id) { super (id); } // Mendefinisikan sendiri run() public void run() { String nama = getName(); for (int i=0; i<5; i++) { System.out.println("Thread " + nama + ":Posisi " + i ); } } } m2.setPriority(8); // digunakan untuk mengatur prioritas m2 agar lebih tinggi daripada m1.

Anda mungkin juga menyukai