Download Multithreading

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Multithreading
As’ad Djamalilleil
http://kampusku.web.id
[email protected]
Thread
• Thread  bagian dari proses
• Multithread  proses yang memiliki lebih
dari satu thread
• Sebuah program multithread dapat
menangani beberapa tugas pada saat
yang sama secara konkuren/paralel
• Sehingga penggunaan sumber daya
menjadi lebih optimal
Kapan multithread digunakan
• Menjalankan proses yg panjang
• Efisiensi sumber daya
Siklus Hidup dari sebuah Thread
Tahap Hidup Thread
• New  Sebuah thread baru memulai siklus hidupnya.
Tetap dalam kondisi ini sampai thread dimulai.
• Runnable  Setelah dimulai, thread dapat dijalankan.
Thread siap mengeksekusi tugasnya.
• Waiting  Thread menunggu thread lain
mengeksekusui tugasnya. Akan kembali ke status
runnable hanya bila thread lai mengirim sinyal ke thread
yang menunggu untuk melanjutkan eksekusi.
• Timed waiting  Sebuah thread yg runnable masuk
waktu tunggu selama periode tertentu. Akan kembali ke
status runnable setelah interval waktunya tercapai atau
event yg ditunggu terjadi
• Terminated  Thread runnable dihentikan bila tugasnya
selesai atau dihentikan
Prioritas Thread
• Prioritas thread berguna bagi SO untuk
penjadwalan/urutan pelaksanaan thread
• Prioritas thread dari:
– MIN_PRIORITY (angka konstan 1)
– MAX_PRIORITY (angka konstan 10)
– Default: NORM_PRIORITY (angka konstan 5)
• Thread dengan prioritas lebih tinggi dianggap
lebih penting untuk dieksekusi (tetap bergantung
dari kebijakan penjadwalan SO)
Langkah Membuat Thread
Cara pertama dengan mengimplement interface Runnable
Langkah 1
• Implement method run() yang ada pada
interface Runnable
• Method ini menyediakan titik awal bagi
thread dan sebagai tempat utama untuk
menuliskan proses apa yang akan
dijalankan oleh thread
• Sintaksnya sbb:
public void run( )
Langkah 2
• Membuat object dari class Thread dengan
konstruktor sbb:
Thread(Runnable objThr, String
namaThr);
• objThr  objek dari class yang
mengimplement interface Runnable
• namaThr  nama dari thread yang dibuat
Langkah 3
• Sekali objek Thread dibuat, maka dapat
dijalankan dengan memanggil method
start()
• Method start() akan memanggil method
run()
• Sintaksnya sbb:
void start( );
Contoh 1
class RunnableDemo implements Runnable {
private Thread t;
private String threadName;
RunnableDemo(String name){
threadName = name;
System.out.println("Creating " + threadName );
}
public void run() {
System.out.println("Running " + threadName );
try {
for(int i = 4; i > 0; i--) {
System.out.println("Thread: " + threadName + ", " + i);
Thread.sleep(50);
}
}
catch (InterruptedException e) {
System.out.println("Thread " + threadName + "
interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start () {
System.out.println("Starting " + threadName );
if (t == null){
t = new Thread (this, threadName);
t.start ();
}
}
}
public class TestThread {
public static void main(String args[]) {
RunnableDemo R1 = new RunnableDemo( "Thread-1");
R1.start();
RunnableDemo R2 = new RunnableDemo( "Thread-2");
R2.start();
}
}
Langkah Membuat Thread
Cara kedua dengan membuat
turunan class Thread
Langkah 1
• Override method run() pada class Thread
public void run( )
Langkah 2
• Setelah objek Thread dibuat, maka thread
tersebut dapat dijalankan dengan
memanggil method start() yang
menjalankan method run()
void start( );
Contoh 2
class ThreadDemo extends Thread {
private Thread t;
private String threadName;
ThreadDemo( String name){
threadName = name;
System.out.println("Creating " + threadName );
}
public void run() {
System.out.println("Running " + threadName );
try {
for(int i = 4; i > 0; i--) {
System.out.println("Thread: " + threadName + ", " + i);
Thread.sleep(50);
}
}catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start (){
System.out.println("Starting " + threadName );
if (t == null) {
t = new Thread (this, threadName);
t.start ();
}
}
}
public class TestThread {
public static void main(String args[]) {
ThreadDemo T1 = new ThreadDemo( "Thread-1");
T1.start();
ThreadDemo T2 = new ThreadDemo( "Thread-2");
T2.start();
}
}
Method pada class Thread
Method
Keterangan
public void start()
Memulai thread dan menjalankan method run() pada object
Thread tersebut
public void run()
Jika objek Thread ini dibuat menggunakan target Runnable
yang terpisah, maka method run() dijalankan pada objek
Runnable tersebut
public final void
setName(String name)
Menggnti nama dari objek Thread. Ada pula method
getName() untuk mendapatkan nama objek tersebut
public final void
setPriority(int priority)
Memberikan prioritas pada objek Thrad ini. Dapat bernilai 1
s/d 10
public final void
Parameter bernilai true menandakan bahwa Thread ini
setDaemon(boolean on) merupakan sebuah thread Daemon
public final void
join(long millisec)
Thread yang menjalankan method ini pada thread kedua,
menyebabkan thread pertama tadi tertunda sampai thread
kedua berhenti atau interval waktu tertentu tercapai
public void interrupt()
Menginterupsi thread, menyebabkan thread tersebut
melanjutkan eksekusi bila tertunda karena alasan tertentu
public final boolean
isAlive()
Memberikan nilai true jika thread masih aktif (mulai dijalankan
sampai selesai)
public static void yield()
Menyebabkan thread yang sedang berjalan mengalah
pada thread lain dengan prioritas sama yang sedang
menunggu untuk dijadwalkan
public static void
sleep(long millisec)
Menunda thread yang sedang berjalan selama
beberapa milidetik
public static boolean
holdsLock(Object x)
Bernilai true jika thread tersebut memegang kunci
pada objek yang diberikan
public static Thread
currentThread()
Memberikan referensi pada thread yang sedang
berjalan, dimana merupakan thread yang menjalankan
method ini
public static void
dumpStack()
Mencetak stack trace dari thread yang sedang
berjalan, berguna untuk proses debugging pada
aplikasi multithread
Contoh 3
// File Name : DisplayMessage.java
// Create a thread to implement Runnable
public class DisplayMessage implements Runnable{
private String message;
public DisplayMessage(String message){
this.message = message;
}
public void run(){
while(true){
System.out.println(message);
}
}
}
// File Name : GuessANumber.java
// Create a thread to extentd Thread
public class GuessANumber extends Thread{
private int number;
public GuessANumber(int number){
this.number = number;
}
public void run(){
int counter = 0;
int guess = 0;
do{
guess = (int) (Math.random() * 100 + 1);
System.out.println(this.getName() + " guesses " +
guess);
counter++;
}while(guess != number);
System.out.println("** Correct! " + this.getName()
+ " in " + counter + " guesses.**");
}
}
// File Name : ThreadClassDemo.java
public class ThreadClassDemo{
public static void main(String [] args){
Runnable hello = new DisplayMessage("Hello");
Thread thread1 = new Thread(hello);
thread1.setDaemon(true);
thread1.setName("hello");
System.out.println("Starting hello thread...");
thread1.start();
Runnable bye = new DisplayMessage("Goodbye");
Thread thread2 = new Thread(bye);
thread2.setPriority(Thread.MIN_PRIORITY);
thread2.setDaemon(true);
System.out.println("Starting goodbye thread...");
thread2.start();
System.out.println("Starting thread3...");
Thread thread3 = new GuessANumber(27);
thread3.start();
try{
thread3.join();
}catch(InterruptedException e){
System.out.println("Thread interrupted.");
}
System.out.println("Starting thread4...");
Thread thread4 = new GuessANumber(75);
thread4.start();
System.out.println("main() is ending...");
}
}