java線程異常
『壹』 java多線程執行異常
多線程不是多個線程一起執行,多線程實際上是多個線程之間輪流執行的,就是將一個時間段分成若干個時間片,每個線程只運行一個時間片,由於時間片極短,而且電腦運行極快,線程之間切換也極快,幾乎可以看做是並行運行的,也就是說可以看成是同時運行的.但實際卻不是的同時運行的.你的循環次數太少,執行的時間小於時間片,所以才不會交替出現,你可以把i改為100試下
『貳』 有沒有java線程和異常處理的經典代碼
是特殊的線程,一般用於在後台為其他線程提供服務.
isDaemon():判斷一個線程是否為守護線程.
set
Daemon():設置一個線程為守護線程.
Thread類和Runnable介面
Thread類
類Thread在包java.lang中定義,它的構造方法如下:
public
Thread();
public
Thread(Runnable
target);
public
Thread(Runnable
target,String
name);
public
Thread(String
name);
public
Thread(ThreadGroup
group,Runnable
target);
public
Thread(ThreadGroup
group,
String
name);
主要方法
isActive()
判斷是否處於執行狀態
Suspend()
暫停執行
reSume
恢復執行
start()
開始執行
Stop()
停止執行
sleep()
睡眠
run()
程序體
yield()
向其他線程退讓運行權
線程優先順序
Public
statuc
final
int
MAX_PRIORITY最高優先順序,10
Public
statuc
final
int
MIN_PRIORITY最低優先順序,1
Public
statuc
final
int
NORM_PRIORITY普通優先順序,5
Runnable介面
Runnable介面中只定義了一個方法run()作為線程體,
void
run()
Java的線程是通過java.lang.Thread類來實現的。
VM啟動時會有一個由主方法(public
static
void
main(){})所定義的線程。
可以通過創建Thread的實例來創建新的線程。
每個線程都是通過某個特定的Thread對象所對應的方法run()來完成其操作的,方法run()稱為線程體。
通過調用Thread類的start()方法來啟動一個線程
Java裡面實現多線程,有2個方法
1
繼承
Thread類,比如
class
MyThread
extends
Thread
{
public
void
run()
{
//
這里寫上線程的內容
}
public
static
void
main(String[]
args)
{
//
使用這個方法啟動一個線程
new
MyThread().start();
}
}
2
實現
Runnable介面
class
MyThread
implements
Runnable{
public
void
run()
{
//
這里寫上線程的內容
}
public
static
void
main(String[]
args)
{
//
使用這個方法啟動一個線程
new
Thread(new
MyThread()).start();
}
}
一般鼓勵使用第二種方法,應為Java裡面只允許單一繼承,但允許實現多個介面。第二個方法更加靈活。
『叄』 java 創建的線程出現異常,線程停止么
般情況下,線程裡面的代碼執行完畢,這個線程就結束了,關閉了。
如果線程是後台線程,那麼當所有前台線程結束,這個後台線程不管有沒有執行完畢,也會關閉。
『肆』 關於java線程池中線程執行異常捕獲
線程拋出的異常,只能有那個線程捕獲,其他線程是無法捕獲的。你的線程池對象在主線程中,主線程無法捕獲其他線程的異常。
你可以使用線程間通信的方式,通知主線程,發生了異常。
『伍』 java線程異常
線程拋出的異常,只能有那個線程捕獲,其他線程是無法捕獲的。你的線程池對象在主線程中,主線程無法捕獲其他線程的異常。你可以使用線程間通信的方式,通知主線程,發生了異常。
『陸』 Java異常處理線程問題
用這個介面試試,java.util.concurrent
.ScheledExecutorService,當連接失敗時啟動下面的任務再去連接。
import
static
java.util.concurrent.TimeUnit.*;
class
BeeperControl
{
private
final
ScheledExecutorService
scheler
=
Executors.newScheledThreadPool(1);
public
void
beepForAnHour()
{
final
Runnable
beeper
=
new
Runnable()
{
public
void
run()
{
System.out.println("beep");
}
};
final
ScheledFuture<?>
beeperHandle
=
scheler.scheleAtFixedRate(beeper,
10,
10,
SECONDS);
scheler.schele(new
Runnable()
{
public
void
run()
{
beeperHandle.cancel(true);
}
},
60
*
60,
SECONDS);
}
}
『柒』 java線程發生異常時怎麼重新啟動這個線程
1.主線程寫個循環3次的循環
2.循環體內運行線程,運行完以後調用wait()等待
3.線程在運行,如果出異常notifyAll()喚醒主線程繼續循環
『捌』 Java線程的幾種狀態
線程是一個動態執行的過程,它有一個從產生到死亡的過程,共五種狀態:
1、新建(new Thread)
當創建Thread類的一個實例(對象)時,此線程進入新建狀態(未被啟動)
例如:Thread t1=new Thread();
2、就緒(runnable)
線程已經被啟動,正在等待被分配給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();
3、運行(running)
線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先順序更高的線程進入,線程將一直運行到結束。
4、堵塞(blocked)
由於某種原因導致正在運行的線程讓出CPU並暫停自己的執行,即進入堵塞狀態。
正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠著的線程在指定的時間過去可進入就緒狀態。
正在等待:調用wait()方法。(調用notify()方法回到就緒狀態)
被另一個線程所阻塞:調用suspend()方法。(調用resume()方法恢復)
5、死亡(dead)
當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。
自然終止:正常運行run()方法後終止
異常終止:調用stop()方法讓一個線程終止運行