導航:首頁 > 編程語言 > 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線程死掉相關的資料

熱點內容
cad安裝上為什麼文件夾是空的 瀏覽:676
mp3文件多少位元組 瀏覽:261
哪個飾品批發網站好 瀏覽:944
ef資料庫備注 瀏覽:824
iae的配置文件 瀏覽:454
簡單九宮格密碼 瀏覽:89
word2010表格調整行距 瀏覽:960
cad只顯示保存一個plt文件 瀏覽:500
街頭籃球新版本技能兌換券 瀏覽:849
家庭如何做好網路營銷 瀏覽:465
如何設置胎壓監測數據 瀏覽:530
降噪工具 瀏覽:692
obs編程是什麼意思 瀏覽:859
怎麼看c4d打開了多少個文件 瀏覽:792
蘋果銀河高清壁紙 瀏覽:811
怎麼從蘋果電腦垃圾桶找迴文件 瀏覽:771
介面文件不能用action寫嗎 瀏覽:85
svn代碼提交規范 瀏覽:642
在宣讀多少號文件時怎麼讀數字 瀏覽:921
網站中的區域網訪問量是什麼意思 瀏覽:397

友情鏈接