Ⅰ java中起一個線程池 每秒開啟3個線程 每個線程睡眠2秒 2秒之後關閉線程 !!!!
classmythreadextendsThread{
privateStringid;
/**
*
*/
publicmythread(Stringid){
//TODOAuto-generatedconstructorstub
this.id=id;
}
@Override
publicvoidrun(){
System.out.println(id+" 正在執行......Time:"+newSimpleDateFormat("yyyy-MM-ddhh:mm:ss").format(newDate()));
try{
this.sleep(2*1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println(id+" 關閉......Time:"+newSimpleDateFormat("yyyy-MM-ddhh:mm:ss").format(newDate()));
}
}
publicstaticvoidmain(String[]args)throwsException{
ThreadPoolExecutortpe=(ThreadPoolExecutor)Executors.newCachedThreadPool();
while(true){
for(inti=0;i<3;i++){
Stringid=UUID.nameUUIDFromBytes((i+"").getBytes()).toString();
tpe.execute(newmythread(id));
}
System.out.println("當前線程數為:"+tpe.getPoolSize());
Thread.sleep(1000);
}
}
Ⅱ JAVA中如何控制線程的啟動與暫停
線程的狀態表示線程正在進行的活動以及在此時間段內所能完成的任務.線程有創建,可運行,運行中,阻塞,死亡五中狀態.一個具有生命的線程,總是處於這五種狀態之一:
1.創建狀態
使用new運算符創建一個線程後,該線程僅僅是一個空對象,系統沒有分配資源,稱該線程處於創建狀態(new thread)
2.可運行狀態
使用start()方法啟動一個線程後,系統為該線程分配了除CPU外的所需資源,使該線程處於可運行狀態(Runnable)
3.運行中狀態
Java運行系統通過調度選中一個Runnable的線程,使其佔有CPU並轉為運行中狀態(Running).此時,系統真正執行線程的run()方法.
4.阻塞狀態
一個正在運行的線程因某種原因不能繼續運行時,進入阻塞狀態(Blocked)
5.死亡狀態
線程結束後是死亡狀態(Dead)
創建線程和啟動線程並不相同,在一個線程對新線程的Thread對象調用start()方法之前,這個新線程並沒有真正開始執行。Thread對象在其線程真正啟動之前就已經存在了,而且其線程退出之後仍然存在。這可以讓您控制或獲取關於已創建的線程的信息,即使線程還沒有啟動或已經完成了。
通常在構造器中通過start()啟動線程並不是好主意。這樣做,會把部分構造的對象暴露給新的線程。如果對象擁有一個線程,那麼它應該提供一個啟動該線程的start()或init()方法,而不是從構造器中啟動它。
結束Java線程
Java線程會以以下三種方式之一結束:
Java線程到達其run()方法的末尾。
Java線程拋出一個未捕獲到的Exception或Error。
另一個Java線程調用一個棄用的stop()方法。棄用是指這些方法仍然存在,但是您不應該在新代碼中使用它們,並且應該盡量從現有代碼中除去它們。
當Java程序中的所有線程都完成時,程序就退出了。
Ⅲ JAVA-關於線程Sleep的問題!
1.在ThreadA 中的run中sleep不會影響System.out.println("Main thread is running....");
2.run方法執行完,線程就結束了
Ⅳ Java線程中的sleep方法作用是啥,啥時候用此方法
sleep(毫秒數)是Thread類的靜態方法。
使用時:Thread.sleep(毫秒數);
如Thread.sleep(1000);該線程睡眠1秒鍾版,之間此線程什權么都不做。
等1秒鍾之後,繼續餘下代碼執行。
不過線程是沒有保證的。也許1秒鍾之後,該線程沒有轉為可運行狀態,也是可能的。
Ⅳ java如何用Runnable實現讓這線程斷斷續續的休眠
R r=new R(); 沒有必要,等於每個R對象運行時就會產生一個新的R對象,好在你沒讓它運行起來版。否則內存遞推權很快就滿了。
talentwei8899說的對,直接使用Thread.CurrentThread.sleep(1000);
休眠的是當前線程。
若想讓進程休眠時間不同,休眠的時間可取個隨機數。
Ⅵ java中如何線程的睡眠與喚醒
classMyThreadextendsThread
{
publicMyThread()
{
super();
}
publicMyThread(Stringname)
{
super(name);
}
publicvoidrun()
{
for(inti=0;i<10;i++)
{
System.out.println(super.getName()+":"+i);
try
{
sleep(500);
}
catch(InterruptedExceptione)
{
System.out.println("線程被叫醒");
}
}
}
}
publicclassSleepTest
{
publicstaticvoidmain(String[]args)
{
MyThreadthread1=newMyThread("第1個線程");
MyThreadthread2=newMyThread("第2個線程");
thread1.start();
thread2.start();
}
}