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

熱點內容
如何把編程文件轉為hex 瀏覽:80
清除蘋果地圖來自地址 瀏覽:233
已經打開的文件如何清理 瀏覽:685
視頻網站有什麼用 瀏覽:70
多個表格文件怎樣壓縮文件 瀏覽:729
cad文件大很卡如何解決 瀏覽:633
將java程序打包成apk 瀏覽:277
2021唱吧文件找不到了 瀏覽:463
華為p9手機文件管理 瀏覽:284
固定在工具欄的文件夾怎麼查找路徑 瀏覽:667
半條命2有幾個版本 瀏覽:333
電腦管家微信備份文件夾 瀏覽:826
ubuntu文件夾解鎖 瀏覽:34
網站多少錢一單 瀏覽:382
系統鏡像恢復找不到文件 瀏覽:255
進什麼網站 瀏覽:588
修改了配置文件代碼沒有讀出來 瀏覽:749
vss資料庫是什麼 瀏覽:899
奇跡13單機系統找不到指定文件 瀏覽:719
flyme魅藍3以前的版本 瀏覽:318

友情鏈接