『壹』 java多線程執行異常
多線程不是多個線程一起執行,多線程實際上是多個線程之間輪流執行的,就是將一個時間段分成若干個時間片,每個線程只運行一個時間片,由於時間片極短,而且電腦運行極快,線程之間切換也極快,幾乎可以看做是並行運行的,也就是說可以看成是同時運行的.但實際卻不是的同時運行的.你的循環次數太少,執行的時間小於時間片,所以才不會交替出現,你可以把i改為100試下
『貳』 java多線程中出現的異常分別有哪些
是線程中的方法,會拋出異常,如
public final void join() throws InterruptedException
除了線程的方法,線程裡面自己寫的代碼邏輯,也會發生異常的。
『叄』 java多線程問題
Thread.interrupt(); 這里的線程中斷是針對wiat 的狀態下才有效果的
『肆』 java線程異常
線程拋出的異常,只能有那個線程捕獲,其他線程是無法捕獲的。你的線程池對象在主線程中,主線程無法捕獲其他線程的異常。你可以使用線程間通信的方式,通知主線程,發生了異常。
『伍』 linux上執行java多線程程序異常
碰到這種錯誤, 一般是
安裝的 JDK 和Linux系統版本或者動態鏈接庫有差異;
或者, 你發現了 JDK7.0虛擬機的一個BUG, 可以報告給 oracle了
『陸』 java線程發生異常時怎麼重新啟動這個線程
1.主線程寫個循環3次的循環
2.循環體內運行線程,運行完以後調用wait()等待
3.線程在運行,如果出異常notifyAll()喚醒主線程繼續循環
『柒』 java多線程錯誤
因為你的 threads 類是內部類,而且不是靜態的,在 new threads() 的時候上下文中必須有 shiyan501 這個類的一個實例。所以 new threads() 這條語句不能出現在靜態方法中,比如 static 的 main 。
修改方法有兩種:
讓 threads 類變成靜態的
threads 類前面加上 static 修飾符
把 threads 類拿到 shiyan501 類的外面
把 new threads() 語句放到一個實例方法中,比如變成下面這樣子:
importjava.util.Date;
publicclassshiyan501{
classthreadsextendsThread{
publicthreads(inta){
inti=a;
System.out.println("創建進程:"+i);
}
publicvoidrun(){
Datedate=newDate();
}
}
publicthreadsstartAThread(inti){
//這是一個實例方法,所以可以調佣newthreads()
threadst=newthreads(i);
t.start();
returnt;
}
publicstaticvoidmain(String[]args){
shiyan501sy=newshiyan501();
threadsa=sy.startAThread(1);
threadsb=sy.startAThread(2);
threadsc=sy.startAThread(3);
}
}
但從你的程序來看,1.1 ,也就是把 threads 聲明成靜態是最恰當的做法。
『捌』 使用Java thread 多線程會有什麼嚴重的錯誤
會有各種錯誤吧.
比如,如果一個線程正在迭代某非線程安全集合.
另外一個集合卻修改了這個集合.
則會跑出modify什麼的.
如果一個線程取了某個對象做操作.另外一個線程卻將對象里的內容置空,則會空指針
再比如說.一個線程需要判斷某個集合是否為空.如果為空則new一個新的放進去,並在集合里添加一個元素.當他判斷到這個集合為空了之後,在new集合的時候,另外一個線程判空,new 集合,並添加了一個元素,
那麼第一個線程繼續操作,會把第二個線程的元素給抹殺掉.數據丟失.
這樣的例子有很多很多.
程序崩潰是輕的.
數據異常會讓人崩潰.運行一個程序,每次都得到不同的結果你會是什麼表情....
樓上的也說了,線程不宜過多.這是真的.畢竟,線程都是要佔用cpu資源.一萬個人吃一塊冰糕....這個冰糕肯定瞬間就被吃沒了.而且,這一萬個人基本都吃不著.
『玖』 java爬蟲採用多線程,資料庫連接多了就報異常
可以通過測試對錯誤原因進行排查,如果連接少量時不出問題,那就是連接量超出了某一數值出現異常,可以查看資料庫的鏈接上限,如果是連接上限原因,可以嘗試上調上限或者降低連接數量