執行緒生命週期
任何事物都是生命週期,執行緒也是,
正常終止 當執行緒的run()執行完畢,執行緒死亡。
使用標記停止執行緒
注意:stop方法已過時,就不能再使用這個方法。
如何使用標記停止執行緒停止執行緒。
開啟多執行緒執行,執行**通常是迴圈結構,只要控制住迴圈,就可以讓run方法結束,執行緒就結束。
package api;
public class thread_last catch (interruptedexception e)
con.tag=false;
pro.tag=false;
}
}
//先些幾個類
class person1 catch (interruptedexception e)
}
this.name=name;
this.***=***;
flag=true;
notify();
}public synchronized void read() catch (interruptedexception e)
}system.out.println("name: "+this.name+" ***: "+this.***);
flag=false;
notify();
}
}
//生產者
class producer1 implements runnable
public producer1(person1 p)
public void run() else
i++;
} }}
}
//消費者
class consumer1 implements runnable
public consumer1(person1 p)
public void run()
}後台執行緒
後台執行緒:就是隱藏起來一直在默默執行的執行緒,直到程序結束。
實現:setdaemon(boolean on)
特點:當所有的非後台執行緒結束時,程式也就終止了同時還會殺死程序中的所有後台執行緒,也就是說,只要有非後台執行緒還在執行,程式就不會終止,執行main方法的主線程就是乙個非後台執行緒。
必須在啟動執行緒之前(呼叫start方法之前)呼叫setdaemon(true)方法,才可以把該執行緒設定為後台執行緒。
一旦main()執行完畢,那麼程式就會終止,jvm也就退出了。
可以使用isdaemon() 測試該執行緒是否為後台執行緒(守護執行緒)。
該案例:開啟了乙個qq檢測公升級的後台執行緒,通過while真迴圈進行不停檢測,當計數器變為100的時候,表示檢測完畢,提示是否更新,執行緒同時結束。
為了驗證,當非後台執行緒結束時,後台執行緒是否終止,故意讓該後台執行緒睡眠一會。發現只要main執行緒執行完畢,後台執行緒也就隨之消亡了。
class qqupdate implements runnable catch (interruptedexception e)
if (i == 100)
}}}public class demo9
}thread的join方法
當a執行緒執行到了b執行緒join方法時a就會等待,等b執行緒都執行完a才會執行,join可以用來臨時加入執行緒執行
本案例,啟動了乙個jointhread執行緒,main(主線程)進行for迴圈,當計數器為50時,讓jointhread,通過join方法,加入到主線程中,發現只有jointhread執行緒執行完,主線程才會執行完畢.
可以刻意讓jointhread執行緒sleep,如果jointhread沒有呼叫join方法,那麼肯定是主線程執行完畢,但是由於jointhread執行緒加入到了main執行緒,必須等jointhread執行完畢主線程才能繼續執行。
class jointhread implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname() + " i:" + i);
i++;
}}public class demo10
system.err.println(thread.currentthread().getname() + " i:" + i);
i++;
}
}
}
上述程式用到了thread類中的join方法,即th.join語句,作用是將th對應的執行緒合併到嗲用th.join語句的執行緒中,main方法的執行緒中計數器到達100之前,main執行緒和one執行緒是交替執行的。在main執行緒中的計數器到達100後,只有one執行緒執行,也就是one執行緒此時被加進了mian執行緒中,one執行緒不執行完,main執行緒會一直等待
帶引數的join方法是指定合併時間,有納秒和毫秒級別。
多執行緒講解
using system using system.threading using system.windows.forms namespace threadtest private void form1 load object sender,eventargs e private void but...
Java多執行緒五 後台執行緒
下面是乙個後台執行緒的例子 public class daemons implements runnable catch interruptedexception e public static void main string args throws interruptedexception sy...
多執行緒(二) 前台執行緒和後台執行緒 聯合執行緒
前台執行緒和後台執行緒的關係 後台執行緒前台執行緒建立 public class test thread t newtestthread 必須在start 前設定為後台執行緒 不加setdaemon true 則是前台執行緒 t.setdaemon true t.start class testth...