導航:首頁 > 編程語言 > java線程死掉

java線程死掉

發布時間:2023-08-07 00:42:28

java中線程的幾種可用狀態有哪些請大家解釋一下。

我理解的有5種:
1、創建,剛創建出線程對象,比如new Thread()
2、就緒,調用了start方法,但內此時並不是調用就立馬被運行,容在這期間要讓cpu執行你,在等待執行過程叫就緒也叫等待。cpu並不是立馬執行,而是串列以極快速度切換進程的運行著
3、運行,正在運行了,創建出線程,脫離了主線程,進入run,天高任鳥飛
4、死亡,異常終止,或run執行完畢
5、阻塞,運行過程中,交出cpu執行權休眠。為什麼要休眠?某些某些特定的條件等待條件成熟,這時候手動讓線程休眠進入阻塞狀態
線程之間但狀態是可任意轉換的,阻塞醒來就是就緒,運行中又阻塞,就緒運行死亡,等狀態可切換。
還有一種是進程的狀態
1、就緒,創建子進程,等待cpu調度執行
2、運行,運行程序
3、僵屍,運行完畢死亡等待收屍
3、暫停,被信號暫停,等待信號喚醒
4、阻塞,等待條件成熟,人為休眠。條件滿足或喚醒

進程和線程狀態,非常類似

Ⅱ java 後台線程自己斷掉一般是什麼由原因引起的

1.所謂守護線程就是運行在程序後台的線程,程序的主線程Main(比方java程序回一開始啟動時創建的答那個線程)不會是守護線程.

2.Daemon thread在Java裡面的定義是,如果虛擬機中只有Daemon thread 在運行,則虛擬機退出。
虛擬機中可能會同時有很多個線程在運行,只有當所有的非守護線程都結束的時候,虛擬機的進程才會結束,不管在運行的線程是不是main()線程。

3.Main主線程結束了(Non-daemon thread),如果此時正在運行的其他threads是daemon threads,JVM會使得這個threads停止,JVM也停下.
如果此時正在運行的其他threads有Non-daemon threads,那麼必須等所有的Non daemon線程結束了,JVM才會停下來.

4.總之,必須等所有的Non-daemon線程都運行結束了,只剩下daemon的時候,JVM才會停下來,注意Main主程序是Non-daemon線程.

5.默認產生的線程全部是Non-daemon線程.

Ⅲ java多線程死循環

你程序是:
服務端有不斷的向客服端寫信息,客戶端有不斷的讀來自服務端的信息。
但是反過來,客戶端沒有不斷的向服務端寫信息。服務端也沒有不斷的讀來自客戶端的信息。

用線程解決:
在客戶端新加一條線程,專門用來讀取來自服務端的信息。
在服務端新加一條線程,專門用來讀取來自客戶端的信息。
而在各自的main()函數中只負責不斷接收system.in信息,然後發送信息..

其實不用線程的。。我也改了下,改的好像較多。
運行步驟:
開server端,開kehu端。客房端先寫入信息。。然後,你一句我一句。只能按這順序。。這就是沒用線程的結果。

代碼如下:

服務端:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args)
{
System.out.println("我是伺服器");
try {
ServerSocket ss=new ServerSocket(8000);
Socket sk=ss.accept();
OutputStream os=sk.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
bw.write("你好,我是伺服器,有什麼需要我服務的嘛?\n");
bw.flush();

InputStream is=sk.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
while(true)
{
String str=br.readLine();
if(str.equals("bye")||str==null)break;
System.out.println("客戶端說:"+str);

String sr="";
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
sr=br1.readLine();
bw.write(sr+"\n");
bw.flush();
}
}
catch (Exception e) {
System.out.println("客用戶機己斷開");
}
}
}

客戶端:
import java.net.*;
import java.io.*;
public class kehu {
public static void main(String[] args)
{
System.out.println("我是客戶");
try {
Socket s=new Socket(InetAddress.getByName(null),8000);
InputStream is=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
OutputStream os=s.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));

String sr="";
while(true)
{
sr=br.readLine();
if(sr.equals("bye")||sr==null)break;
System.out.println("伺服器說"+sr);

BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
sr=br1.readLine();
bw.write(sr+"\n");
bw.flush();

}

} catch (Exception e) {
System.out.println("伺服器未開戶或己關閉~");
}
}

}

Ⅳ java多線程死循環

如果你對一個線程 start 了,那你的程序中實際上有兩個線程,還有一個main
當前線回程是main的子線程,實際上運答行時,子線程start以後,main的方法還是會繼續往下執行,直到退出,當main退出以後,子線程也就死了,當你將死循環寫在子線程里,相當與子線程死掉了,但不影響主線程的執行,主線程遇到退出一樣退出了程序,當你寫在主線程里的死循環,那就在那裡循環,因為它沒有退出語句 System.exit(0); 或者執行到了最後一個大括弧

Ⅳ Java中一個線程執行死循環有什麼後果

有兩個線程在並發運行,一個線程執行的代碼中含有一個死循環如:while(true)....當該線程在執行while(true)中代碼時,另一個線程會有執行。

一.示例代碼:

總結:若線程A先獲得對象鎖時,由於while循環,線程A一直在while空循環中。而線程B也因為無法獲得鎖而執行不了methodB()。

可以看出,如果在一個線程在synchronized方法中無法退出,無法將鎖釋放,另一個線程就只能無限等待了。

閱讀全文

與java線程死掉相關的資料

熱點內容
蘋果手機如何管控app 瀏覽:633
mn文件夾 瀏覽:590
安卓平板通用刷機包下載 瀏覽:751
安卓獲取內部存儲路徑 瀏覽:880
寫代碼兩台顯示器 瀏覽:327
unitypackage壓縮文件 瀏覽:493
奕心安卓 瀏覽:563
使用土地的有關證明文件包含哪些 瀏覽:493
數據標注哪裡可以接 瀏覽:482
在家自學編程下什麼學 瀏覽:705
最近很火的app軟體是什麼軟體 瀏覽:862
ai文字工具 瀏覽:157
蘭博玩游戲路徑怎麼選擇正確文件 瀏覽:972
淘寶直通車恢復老版本 瀏覽:510
播放草莓的圖片我都文件 瀏覽:55
微信大文件打不開 瀏覽:767
家裝合同准備哪些文件 瀏覽:296
應用bat合並excel文件 瀏覽:984
迅雷影音文件夾 瀏覽:109
makefile的文件路徑 瀏覽:392

友情鏈接