Java Thread dan Algoritmanya

Java Thread dan Algoritmanya
Java Thread dan Algoritmanya
Penjadualan thread yang Runnable oleh Java Virtual Machine dilakukan dengan konsep preemptive dan mempunyai prioritas tertinggi. Dalam algoritma evaluasi ditentukan terlebih dahulu kriteria-kriterianya seperti utilisasinya dilihat dari segi waktu tunggu yang digunakan dan throughput yang disesuaikan dengan waktu turnaroundnya.

Penjadualan Java Thread

Java Virtual Machine menjadualkan thread menggunakan preemptive, berdasarkan prioritas algoritma penjadualan. Semua Java Thread diberikan sebuah prioritas dan Java Virtual Machine menjadualkan thread yang Runnable dengan menggunakan prioritas tertinggi saat eksekusi. Jika ada dua atau lebih thread yang Runnable yang mempunyai prioritas tertinggi, Java Virtual Machine akan menjadualkan thread tersebut menggunakan sebuah antrian secara FIFO.

Keunggulan Penjadualan Java Thread

Java Virtual Machine menggunakan prioritas preemtive berdasarkan algoritma penjadualan.
  1. Semua thread Java mempunyai prioritas dan thread dengan proritas tertinggi dijadualkan untuk dieksekusi oleh Java Virtual Machine.
  2. Jika terjadi dua thread dengan prioritas sama maka digunakan algoritma First In First Out.

Thread lain dijalankan bila terjadi hal-hal berikut ini:
  • Thread yang sedang dieksekusi keluar dari status runnable misalnya diblok atau berakhir
  • Thread dengan prioritas yang lebih tinggi dari thread yang sedang dieksekusi memasuki status runnable. Maka thread dengan prioritas yang lebih rendah ditunda eksekusinya dan digantikan oleh thread dengan prioritas lebih tinggi.

Time slicing tergantung pada implementasinya. Sebuah thread dapat memberi kontrol pada yield() method. Saat thread memberi sinyal pada CPU untuk mengontrol thread yang lain dengan prioritas yang sama maka thread tersebut dijadualkan untuk dieksekusi. Thread yang memberi kontrol pada CPU disebut Cooperative Multitasking.

Prioritas Thread

Java Virtual Machine memilih thread yang runnable dengan prioritas tertinggi. Semua thread java mempunyai prioritas dari 1 sampai 10. Prioritas tertinggi 10 dan berakhir dengan 1 sebagai prioritas terendah. Sedangkan prioritas normal adalah 5.
  • Thread.MIN_PRIORITY = thread dengan prioritas terendah.
  • Thread.MAX_PRIORITY = thread dengan prioritas tertinggi.
  • Thread.NORM_PRIORITY = thread dengan prioritas normal.

Saat thread baru dibuat ia mempunyai prioritas yang sama dengan thread yang menciptakannya. Prioritas thread dapat diubah dengan menggunakan setpriority() method.

Penjadualan Round-Robin dengan Java

Round Robin
public class Scheduler extends Thread {
public Scheduler() {
timeSlice = DEFAULT_TIME_SLICE;
queue = new Circularlist();
}

public Scheduler(int quantum) {
timeSlice = quantum;
queue = new Circularlist();
}

public addThread(Thread t) {
t.setPriority(2);
queue.additem(t);
}

private void schedulerSleep() {
try{
Thread.sleep(timeSlice );
} catch (InterruptedException e){};
}

public void run(){
Thread current;
This.setpriority(6);
while (true) {
// get the next thread
current = (Thread)qeue.getnext();
if ( current != null) && (current.isAlive())) {
current.setPriority(4);
schedulerSleep();
current.setPriority(2)
}
}
}

private CircularList queue;
private int timeSlice;
private static final int DEFAULT_TIME_SLICE = 1000;
}

public class TesScheduler{
public static void main()String args[]) {
Thread.currentThread().setpriority(Thread.Max_Priority);
Schedular CPUSchedular = new Scheduler ();
CPUSchedular.start()
TestThread t1 = new TestThread("Thread 1");
t1.start()
CpuSchedular.addThread(t1);
TestThread t2 = new TestThread("Thread 2");
t2.start()
CpuSchedular.addThread(t2);
TestThread t3 = new TestThread("Thread 1");
t3.start()
CpuSchedular.addThread(t3);
}
}

Evaluasi Algoritma

Bagaimana kita memilih sebuah algoritma penjadualan CPU untuk sistem-sistem tertentu. Yang menjadi pokok masalah adalah kriteria seperti apa yang digunakan untuk memilih sebuah algoritma. Untuk memilih suatu algoritma, pertama yang harus kita lakukan adalah menentukan ukuran dari suatu kriteria berdasarkan:
  • Memaksimalkan penggunaan CPU dibawah maksimum waktu responnya yaitu 1 detik.
  • Memaksimalkan throughput karena waktu turnaroundnya bergerak secara linier pada saat eksekusi proses.

Sinkronisasi dalam Java

Setiap objek dalam java mempunyai kunci yang unik yang tidak digunakan biasanya. Saat method dinyatakan sinkron, maka method dipanggil untuk mendapatkan kunci untuk objek tersebut. Saat kunci tersebut dipunyai thread yang lain maka thread tersebut diblok dan dimasukkan kedalam kumpulan kunci objek, misalnya:

Sinkronisasi
public synchronized void enter(Object item) {
while (count == BUFFER_SIZE)
;
Thread.yeild();
++count;
buffer[in] = item;
in = (in+1) % BUFFER_SIZE;
}

public synchronized void remove (){
Object item;
while (count == 0)
;
Thread.yeild();
--count;
item = buffer[out]
out = (out+1) % BUFFER_SIZE;
return item
}

Metoda Wait() dan Notify()

Thread akan memanggil method wait() saat:
  1. Thread melepaskan kunci untuk objek.
  2. Status thread diblok.
  3. Thread yang berada dalam status wait menunggu objek.

Thread akan memanggil method notify() saat: Thread yang dipilih diambil dari thread yang ada pada himpunan wait. Dengan cara:
  1. Pindahkan thread yang dipilih dari wait set ke entry set.
  2. Atur status dari thread yang dipilih dari blocked menjadi runnable.

Contoh Metoda Wait() dan Notify()

public synchronized void enter(Object item){
while (count == BUFFER_SIZE) {
try{
wait();
} catch (InterruptedException e) {}
}

// add an item to the buffer
++count;
buffer[in] = item;
in = (in+1) % BUFFER_SIZE;
notify();
}

public synchronized void remove(Object item){
while (count == 0) {
try {
wait();
}
catch (InterruptedException e) {}
}
// remove an item to the buffer
--count;
item = buffer[out];
out = (out+1) % BUFFER_SIZE;
notify();
return item;
}

Sumber

Sistem Operasi: Bahan Kuliah IKI-20230
oleh Gabungan Kelompok Kerja 21–28 IKI-20230 Semester Genap 2002/2003

$Revision: 1.3.0.0 $ Edisi
Diterbitkan 30 September 2003
Copyright (Hak Cipta) © 2003 oleh Gabungan Kelompok Kerja 21–28 IKI-20230 Semester Genap 2002/ 2003.

Silakan menyalin, mengedarkan, dan/ atau, memodifikasi bagian dari dokumen – $Revision: 1.3.0.0 $ – – yang dikarang oleh Gabungan Kelompok Kerja 21–28 IKI-20230 Semester Genap 2002/ 2003, sesuai dengan ketentuan "GNU Free Documentation License versi 1.1" atau versi selanjutnya dari FSF (Free Software Foundation); tanpa bagian "Invariant", tanpa teks "Front-Cover", dan tanpa teks "Back-Cover". Lampiran A ini berisi salinan lengkap dari lisensi tersebut. Ketentuan ini TIDAK berlaku untuk bagian dan/ atau kutipan yang bukan dikarang oleh Gabungan Kelompok Kerja 21–28 IKI-20230 Semester Genap 2002/ 2003.

Catatan Revisi
Revisi 1.3 30-09-2003 Revised by: RMS46
Revisi ini diedit oleh Rahmat M. Samik-Ibrahim: melanjutkan perbaikan tata letak dan pengindeksan.
Revisi 1.2 17-09-2003 Revised by: RMS46
Revisi ini diedit oleh Rahmat M. Samik-Ibrahim: melanjutkan perbaikan.
Revisi 1.1 01-09-2003 Revised by: RMS46
Revisi ini diedit oleh Rahmat M. Samik-Ibrahim: melakukan perbaikan struktur SGML, tanpa terlalu banyak mengubah isi buku.
Revisi 1.0 27-05-2003 Revised by: RMS46
Kompilasi ulang, serta melakukan sedikit perapihan.
Revisi 0.21.4 05-05-2003 Revised by: Kelompok 21
Perapihan berkas dan penambahan entity.
Revisi 0.21.3 29-04-2003 Revised by: Kelompok 21
Perubahan dengan menyempurnakan nama file.
Revisi 0.21.2 24-04-2003 Revised by: Kelompok 21
Merubah Kata Pengantar.
Revisi 0.21.1 21-04-2003 Revised by: Kelompok 21
Menambahkan Daftar Pustaka dan Index.
Revisi 0.21.0 26-03-2003 Revised by: Kelompok 21
Memulai membuat tugas kelompok kuliah Sistem Operasi.

Persembahan

Buku ini dipersembahkan dari Gabungan Kelompok Kerja 21–28 IKI-20230 Semester Genap 2002/
2003, oleh Gabungan Kelompok Kerja 21–28 IKI-20230 Semester Genap 2002/ 2003, untuk siapa saja yang ingin mempelajari Sistem Operasi. Tim penyusun buku ini ialah sebagai berikut:
Kelompok 21 (Koordinator)
Dhani Yuliarso, Fernan, Hanny Faristin, Melanie Tedja, Paramanandana D.M., Widya Yuwanda.
Kelompok 22 (Bab 1)
Budiono Wibowo, Agus Setiawan, Baya U.H.S., Budi A. Azis Dede Junaedi, Heriyanto, Muhammad
Rusdi.
Kelompok 23 (Bab 2)
Indra Agung, Ali Khumaidi, Arifullah, Baihaki A.S., Christian K.F. Daeli, Eries Nugroho, Eko Seno P., Habrar, Haris Sahlan.
Kelompok 24 (Bab 3)
Adzan Wahyu Jatmiko, Agung Pratomo, Dedy Kurniawan, Samiaji Adisasmito, Zidni Agni.
Kelompok 25 (Bab 4)
Nasrullah, Amy S. Indrasari, Ihsan Wahyu, Inge Evita Putri, Muhammad Faizal Ardhi, Muhammad Zaki Rahman, N. Rifka N. Liputo, Nelly, Nur Indah, R. Ayu P., Sita A.R.
Kelompok 26 (Bab 5)
Rakhmad Azhari, Adhe Aries, Adityo Pratomo, Aldiantoro Nugroho, Framadhan A., Pelangi, Satrio
Baskoro Y.
Kelompok 27 (Bab 6)
Teuku Amir F.K., Alex Hendra Nilam, Anggraini W., Ardini Ridhatillah, R. Ferdy Ferdian, Ripta
Ramelan, Suluh Legowo, Zulkifli.
Kelompok 28 (Bab 7)
Christiono H, Arief Purnama L.K., Arman Rahmanto, Fajar, Muhammad Ichsan, Rama P. Tardan, Unedo Sanro Simon.

Posting Komentar

Lebih baru Lebih lama

نموذج الاتصال