2013年12月8日 星期日

Daemon Thread

Daemon Thread

Daemon Thread 會隨著主程式結束而自動停止(結束)的一種 Thread。如果你希望某個執行緒在非Daemon執行緒都結束後也跟著終止,那麼您要將它設定為Daemon執行 緒




建立 Thread:
Thread thread = new Thread(new Runnable() {});
方法一: 繼承 Thread Class
public class Hello1 extends Thread
{
String name;
public Hello1(String n)
{
name = n;
}
public void run()
{
for(int i=1; i<=10; i++)
System.out.println(name+ “ Hello “ + i);
}
}

方法二: 實現 Runnable 介面
public class Hello2 implements Runnable
{
String name;
public Hello2(String n)
{
name = n;
}
public void run()
{
for(int i=1; i<=10; i++)
System.out.println(name+ “ Hello “ + i);
}
}



啟動 Thread:
thread.start();
public class ThreadExample1
{
public static void main(String argv[])
{

Hello1 h1 = new Hello1(“Thread1”);
Hello2 h2 = new Hello2(“Thread2”);

Thread t1 = new Thread(h1);
Thread t2 = new Thread(h2);

t1.start();
t2.start();
}




設定為 Daemon Thread :
在start()之前用 setDaemon()
thread.setDaemon(true);

停止 Thread:
run方法中的程式碼執行"完畢"後,該Thread 即會停止,並進入"死亡"狀態。進入"死亡"的Thread 就不能再回到其他狀態了。所以通常會用"暫停"的方式來停止Thread。

暫停 Thread執行:
方法一: sleep
可以在執行緒的run 方法中,呼叫 Thread.sleep(n),該執行緒就會先暫停,直到sleep中設定的秒數為止(千分之秒)再繼續執行。

方法二: yiedl
可以讓某個執行緒立刻進行暫時停止進行等待狀態。

方法三: join
若要讓不同執行緒有先後執行的關係時,可利用join指令

方法四: java.util.concurrent.TimeUnit
- java.util.concurrent.TimeUnit.SECONDS.sleep(3); //睡3秒
- java.util.concurrent.TimeUnit.MICROSECONDS.sleep(50); //睡50微秒
- java.util.concurrent.TimeUnit.NANOSECONDS.timedJoin(t3, 500); //讓 t3 執行緒呼叫join 方法並等待500奈秒
- java.util.concurrent.TimeUnit.MILLISECONDS.timedWait(t3, 123); //讓 t3 執行緒呼叫wait 方法並等待123微秒




synchronized

在Therad 共用資料時,為保護某個 Thread 正在處理的變數時會用 synchronized 來暫時保護(Lock) 一段處理程式以確保某些共用資料(變數)不會產生衝突情形。


沒有留言:

張貼留言