java線程循環
① java—for循環里啟動的線程要怎麼理解
首先類繼承Thread或者實現了Runnable介面,程序就知道這是一個線程類,每次new 一個線程類,相當於創建了一個新的線程對象,使用start是啟動一個線程,線程處於就緒狀態,而run方法屬於線程體;
如此在循環體中循環了20次,創建了20個不同的線程,每次都使用了start方法,也就是啟動了20個不同的線程;
左上角有我頭像,歡迎來學習交流;
② java多線程無限循環的問題
這個問題我建議你在while中加入一個檢查的語句,比如下面的
while(true){
if(x>0){
System.out.println(x--);
}
System.out.println("**"); //這塊地方,你可以加點什麼,讓程序列印出內容,用以判斷
}
你這樣試下後你就會發現問題的,推薦你動手做下
③ java多線程死循環
如果你對一個線程 start 了,那你的程序中實際上有兩個線程,還有一個main
當前線程是main的子線程,實際上運行時,子線程start以後,main的方法還是會繼續往下執行,直到退出,當main退出以後,子線程也就死了,當你將死循環寫在子線程里,相當與子線程死掉了,但不影響主線程的執行,主線程遇到退出一樣退出了程序,當你寫在主線程里的死循環,那就在那裡循環,因為它沒有退出語句 System.exit(0); 或者執行到了最後一個大括弧
④ Java多線程問題 子線程無限循環導致主線程無法執行
我測試了一下,這個判斷語句是已經執行了,就在第一句語句之前進行的,不信可以把if判斷去掉,程序就一句也不執行。說明什麼,說明這個語句exit已經執行,不過,對於線程的終結應該是在線程的循環內部進行定義,在線程的外部限制,好像不合適。
classLeftextendsThread{
intn=0;
publicvoidrun(){
while(n<=8){
n++;
System.out.printf(" %s","Left");
System.out.print(n);
try{
sleep((int)(Math.random()*100)+100);
}
catch(InterruptedExceptione){}
}
}
}
⑤ java線程沒有循環完成就終止了,這是為什麼
sleep一秒鍾之後,上面線程的循環還沒有完成,比方說只循環到630的時候,一秒鍾就結束了,然後你就列印輸出了,自然是沒有2000個
⑥ 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線程for循環沒有循環完成就停止了,這是為什麼
多線程需要基礎學好點。在來開發,否則總有莫名其妙的事情冒出來。而自己無法解釋。
你這個問題很簡單。
你要main主線程1秒後輸出list集合數據。在你代碼中這寫法本身是錯誤的,因為你有2個子線程,有鎖,安全地往list中加2千個數據,卻每次要等待1毫秒,估算2千數據你程序的加完需要2秒多時間,在1秒後,子線程還沒有結束,大概1千個數據還沒加完呢,你主線程就輸出了當前數據。肯定結果不對。哪來的2千個數據呢。你說循環沒完成就停止了,說法完全錯誤。。。
你要main主線程輸出list集合數據。正確操作應該是:
Thread t1 = ...;
t1.start();
t2也是如此。
最後main線程下面,輸出list數據前加2行代碼
t1.join();
t2.join();
然後在列印list。
join方法意思很簡單。就是等待線程結束後,我再繼續。main線程等待了2個子線程都結束後,即保證數據全部進list後,列印結果。
⑧ java多線程中的死循環
是這樣的,ss.accept()方法是阻塞的,也就是說ss所在的線程運行到accept()函數就會一直等待,直到ss接收到了一個Socket請求。正因為accept()是阻塞的,所以一般會把這個函數放在一個單獨的線程,這樣就不會影響主線程(例如程序界面)的運行,Socket編程幾乎是肯定和多線程編程一起用的。accept()放進了單獨的線程了自然就不會影響後面代碼的執行,因為這時accept()的時間片和後續代碼的時間片會由JVM調配,而不是按照代碼編排的先後順序了。
另外你對死循環的理解有偏差,所謂死循環是指循環條件永遠為真而導致循環一直不結束,而由於循環內部的方法阻塞導致的循環不結束不屬於死循環,這兩個有本質的差別。通常Socket.accept()是該放進一個死循環的,也就是你的while(true);
⑨ JAVA多線程里的循環耗時
這里你要改變下思維方式。雖然物理上是兩個獨立事件(開槍和子彈飛),但是計算機在繪圖的時候,啟示是一幀幀畫上去的。所有的事件都是由連續幀繪制出來的。因此,只需要一個線程就可以了:
publicvoidrun(){
intt=0;
while(flag){
intbullet_time=t%600;
//fire
if(bullet_time==0){
//drawfireevent
}
else{
//drawbullets
switch(bullet_time){
case100:
//drawbullet1
break;
//drawbullet2
case200:
break;
//drawbullet3
case300:
break;
//drawbullet4
case400:
break;
//drawbullet5
case500:
break;
}
}
t+=100;
try{Thread.sleep(100);}catch(Exceptione){e.printStackTrace();}}}
⑩ Java中一個線程執行死循環有什麼後果
有兩個線程在並發運行,一個線程執行的代碼中含有一個死循環如:while(true)....當該線程在執行while(true)中代碼時,另一個線程會有執行。
一.示例代碼:
總結:若線程A先獲得對象鎖時,由於while循環,線程A一直在while空循環中。而線程B也因為無法獲得鎖而執行不了methodB()。
可以看出,如果在一個線程在synchronized方法中無法退出,無法將鎖釋放,另一個線程就只能無限等待了。