KONSEP THREAD
Thread merupakan unit dasar dari penggunaan CPU, yang terdiri dari Thread_ID, program counter,register set, dan stack. Sebuah thread berbagi code section, data section, dan sumber daya sistem operasi dengan Thread lain yang dimiliki oleh proses yang sama. Thread juga sering disebut lightweight process.
border=0 v:shapes="BLOGGER_PHOTO_ID_5460301140737715954">
Gambar Thread
Keuntungan Thread
• Responsif
• Berbagai sumber daya
• Ekonomis
• Utilisasi arsitektur multiprosessor
THREAD KERNEL
Thread kernel didukung langsung oleh sistem operasi. Pembuatan, penjadwalan, dan manajemen thread dilakukan oleh kernel pada kernel space. Thread diatur oleh kernel, karena itu jika sebuah thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain di aplikasi untuk melakukan eksekusi. Pada lingkungan multiprocessor, kernel dapat menjadwal thread-thread pada processor yang berbeda. Contoh sistem operasi yang mendukung kernel thread adalah Windows NT, Solaris, Digital UNIX.
Fork dan Exec System Call
Jika fork dipanggil oleh salah satu thread dalam proses:
1. Semua thread diduplikasi.
2. Hanya thread yang memanggil fork.
Jika Thread memanggil exec system call maka program yang dispesifikasi di parameter exec akan mengganti keseluruhan proses termasuk thread dan LWP.
Thread Cancellation
Thread cancellation adalah pemberhentian thread sebelum tugasnya selesai.
Pemberhentian target thread dapat terjadi melalui dua cara yang berbeda :
1. Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread.
2. Defered cancellation: target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara terurut.
Thread Kernel Linux
Linus Torvalds mendefinisikan bahwa sebuah thread adalah Context of Execution (COE), yang berarti bahwa hanya ada sebuah Process Control Block (PCB) dan sebuah penjadwal yang diperlukan. Linux tidak mendukung multithreading,struktur data yang terpisah, atau pun rutin kernel. Linux menyediakan 2 system call yaitu fork dan clone. Fork memiliki fungsi untuk menduplikasi proses dimana proses anak yang dihasilkan bersifat independent. clone memiliki sifat yang mirip dengan fork yaitu sama-sama membuat duplikat dari proses induk.
Secara informal; proses adalah program dalam eksekusi. Suatu proses adalah lebih dari kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada program counter dan isi dari daftar prosesor/ processor’s register. Suatu proses umumnya juga termasuk process stack, yang berisikan data temporer (seperti parameter metoda, address yang kembali, dan variabel lokal) dan sebuah data section, yang berisikan variabel global.
Thread adalah sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. User level thread adalah thread yang tampak oleh programmer dan tidak diketahui oleh kernel. User level thread secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi. Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread. Ada tiga perbedaan tipe dari model yang berhubungan dengan user dan kernel thread.
Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread.
Model one to one: memetakan setiap user thread ke dalam satu kernel thread. Berakhir.
Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.
Mutual Exclusion adalah Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada suatu waktu (kondisi-kondisi untuk solusi). Tiga kondisi untuk menentukan mutual Exclusion diantaranya :
Tidak ada dua proses yang pada saat bersamaan berada di critical region.
Tidak ada proses yang berjalan diluar critical region yang bisa menghambat proses lain
Tidak ada proses yang tidak bisa masuk ke critical region
Race Condition adalah situasi di mana beberapa proses mengakses dan memanipulasi data bersama pada saat besamaan. Nilai akhir dari data bersama tersebut tergantung pada proses yang terakhir selesai. Unutk mencegah race condition, proses-proses yang berjalan besamaan haus di disinkronisasi.
Sinkronisasi adalah Komunikasi antara proses yang membutuhkan place by calls untuk mengirim dan menerima data primitive. Terdapat rancangan yang berbeda-beda dalam implementasi setiap primitive. Pengiriman pesan mungkin dapat diblok (blocking) atau tidak dapat dibloking (nonblocking) – juga dikenal dengan nama sinkron atau asinkron.
Deadlock ialah suatu kondisi permanen dimana proses tidak berjalan lagi ataupun tidak ada komunikasi lagi antar proses. Deadlock disebabkan karena proses yang satu menunggu sumber daya yang sedang dipegang oleh proses lain yang sedang menunggu sumber daya yang dipegang oleh proses tersebut. Atau dengan kata lain setiap proses dalam set menunggu untuk sumber yang hanya bisa dikerjakan oleh proses lain dalam set yang sedang menunggu.
Starvation adalah suatu proses meninggalkan critical section dan lebih dari satu proses menunggu (waiting).Beberapa proses dapat ditolak aksenya dalam waktu tak terbatas.
Monitor adalah kumpulan prosedur, variabel dan struktur data di satu modul atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan pun diinginkan. Tapi proses tak dapat mengakses struktur data internal dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur internal.
Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur penanda yang cocok untuk kebutuhan itu. Variabel khusus untuk penanda ini disebut semaphore.Semaphore mempunyai dua sifat, yaitu:
Semaphore dapat diinisialisasi dengan nilai non-negatif.
Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan Djikstra adalah operasi P dan V.
Thread merupakan kemampuan yang disediakan oleh Java untuk membuat
aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas
tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam
hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses
dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk
pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber
daya secara konkuren.
Ada dua cara yang bisa digunakan dalam membuat sebuah thread, yaitu :
Membuat subclass dari thread
Untuk menjalankan thread, dapat dilakukan dengan memanggil method
start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan
dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run()
pada definisi class. Konstruktor dari cara ini adalah :
ClassThread namavar = new ClassThread();
Namavar.start();
Atau dapat juga langsung dengan cara:
New ClassThread().start();
Mengimplementasikan 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 :
ObjekRunnable objek = new ObjekRunnable();
Thread namavar = new Thread(Objek Runnable);
Atau dengan cara singkat seperti :
New Thread(new ObjekRunnable());
A. Daemon Dan User Thread
Ada dua Macam thread dalam Java, yaitu daemon dan user thread. Daemon
thread merupakan thread yang siklus hidupnya tergantung pada thread utama atau
induk, sehingga apabila thread induk berakhir, maka otomatis thread-thread daemon
juga ikut berakhir. Sedangkan user thread memiliki sifat berbeda, dimana apabila
thread utama sudah selesai, maka user thread akan terus dijalankan.
B. Sleep
Mengatur thread untuk menghentikan prosesnya sejenak dan memberi
kesempatan pada thread atau proses lain. Sleep dilakukan dengan cara memanggil
method :
Sleep(long waktu);
Waktu untuk method ini merupakan tipe long dalam milisekon.
C. Interrupt
Apabila menginginkan suatu thread untuk menghentikan proses, maka perlu
memanggil method interrupt. Interrupt digunakan untuk memberi signal pada thread
untuk menghentikan prosesnya.
Latihan 36. Thread.java
class ThreadBaru extends Thread {
public ThreadBaru(String id) {
super(id);
start(); //Mulai eksekusi thread baru
}
public void run() {
for(int i=0;i
try{
Thread.sleep(100);
}catch(InterruptedException e) {}
}
}
}
class DemoThread {
public static void main(String[] args) {
ThreadBaru thread1 = new ThreadBaru("Thread1");
ThreadBaru thread2 = new ThreadBaru("Thread2");
ThreadBaru thread3 = new ThreadBaru("Thread3");
System.out.println("Thread1 masih dieksekusi : " + thread1.isAlive());
System.out.println("Thread2 masih dieksekusi : " + thread2.isAlive());
System.out.println("Thread3 masih dieksekusi : " + thread3.isAlive());
//tunggu hingga semua child thread selesai dieksekusi
try{
thread1.join();
System.out.println("Thread1 selesai dieksekusi");
thread2.join();
System.out.println("Thread2 selesai dieksekusi");
thread3.join();
System.out.println("Thread3 selesai dieksekusi");
}catch(InterruptedException e) {
System.out.println("Thread utama diinterupsi " + e);
}
System.out.println("Thread utama selesai dieksekusi");
}
}
D. 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.
ThreadSinkronisasi.java
class TestSinkronisasi {
private java.util.Random random = new java.util.Random();
public void callMe(String data) {
System.out.print("[");
try{
Thread.sleep(random.nextInt(200));
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.print(data);
try{
Thread.sleep(random.nextInt(200));
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("]");
}
}
class ThreadBaru extends Thread {
private String data;
private TestSinkronisasi obj;
public ThreadBaru(TestSinkronisasi obj,String data) {
this.obj = obj;
this.data = data;
start();
}
public void run() {
obj.callMe(data);
}
}
class DemoThread {
public static void main(String[] args) {
TestSinkronisasi obj = new TestSinkronisasi();
ThreadBaru thread1 = new ThreadBaru(obj,"Superman");
ThreadBaru thread2 = new ThreadBaru(obj,"Batman");
ThreadBaru thread3 = new ThreadBaru(obj,"Spiderman");
//tunggu hingga semua child thread selesai dieksekusi
try{
68
thread1.join();
thread2.join();
thread3.join();
}catch(InterruptedException e) {
System.out.println("Thread utama diinterupsi " + e);
}
(Copas dari blog yg ada)
Tidak ada komentar:
Posting Komentar