java多線程編程實戰
⑴ java多線程——singleThreadExecutor
singleThreadExecutor是Java多線程編程中一個重要的工具,通過Executors類的靜態方法創建,其特性是僅由一個核心線程進行任務執行,類似於單線程模式處理所有任務。在單一核心線程因異常終止時,系統將自動啟動一個新線程替代它,以確保任務的連續執行。這種線程池設計確保了任務的執行順序與任務提交的順序一致,保持了高效有序的處理流程。創建singleThreadExecutor的示例如下:
代碼示例展示了ThreadPoolExecutor參數的設置,其中核心線程數和最大線程數均被設置為1,意味著系統中最多僅有一個線程在運行。緩沖隊列採用LinkedBlockingQueue實現,其設計為無界隊列,能夠有效存儲等待執行的任務,避免任務因隊列容量限制而被阻塞。
通過singleThreadExecutor,開發者能夠輕松創建一個單線程執行的線程池,這在需要嚴格控制任務執行順序、避免線程競爭或簡化多線程管理場景中尤為適用。同時,其自動線程替代機制在核心線程異常終止時提供了一定的容錯能力,確保了程序的健壯性與穩定性。
⑵ 面向對象JAVA多線程怎麼編程26個不同字母,顏色隨機,大小,位置隨機
main 方法
for(int i= 0;i<list。size;){
隨機得到list下標
隨機生成該字母對象的內容
test t = new test(字母對象)
t.start();
之後刪除list該下標 (保證不同)
}
}
一共需要26個線程 每個線程1次
⑶ java多線程編程 倉庫外有100袋麥子,現在需要創建4個對象來搬1到100袋麥子,麥子袋子上做了1到100的編號
開四個線程和一個大小為100的數組唄。。
數組裡面存放當前某一個麥子是否已經被搬走了,線程每次都從頭到尾掃一遍啊,訪問數組需要加一個synchronized就行啦。
我付一下代碼吧……
package wzy;
public class Test {
public static void main(String[] args) throws Throwable {
People p[] = new People[5];
Thread t[] = new Thread[5];
for(int i = 1; i <= 100; i++) arr[i] = false;
for(int i = 1; i <= 4; i++) t[i] = new Thread(p[i] = new People(i));
for(int i = 1; i <= 4; i++)
t[i].start();
while(get() < 100);
for(int i = 1; i <= 4; i++) t[i].stop();
}
public static Boolean[] arr = new Boolean[105];
public static volatile Integer cnt = 0;
public static boolean get(int k){
synchronized(arr[k]){
if(arr[k]) return false;
else return arr[k] = true;
}
}
public static void add(){
synchronized(cnt){
cnt++;
}
}
public static int get(){
synchronized(cnt){
return cnt;
}
}
}
class People implements Runnable{
public int id;
public People(int t){
id = t;
}
public void run(){
while(true){
while(true){
int temp = new java.util.Random(System.nanoTime()).nextInt(100) + 1;
if(Test.get(temp)){
System.out.println(id + "搬走了" + temp);
Test.add();
break;
}
}
try{ Thread.sleep(10); } catch(Exception e){ e.printStackTrace(); }
}
}
}
⑷ 什麼是多線程編程
多線程編程技術是Java語言的重要特點。多線程編程的含義是將程序任務分成幾個並行的子任務。特別是在網路編程中,你會發現很多功能是可以並發執行的。 比如網路傳輸速度較慢、用戶輸入速度較慢,你可以用兩個獨立的線程去完成這兩個功能,而不影響正常的顯示或其它功能。 多線程是與單線程比較而言的,普通的Windows採用單線程程序結構,其工作原理是:主程序有一個消息循環,不斷從消息隊列中讀入消息來決定下一步所要乾的事情,一般是針對一個函數,只有等這個函數執行完之後,主程序才能接收另外的消息來執行。比如子函數功能是在讀一個網路數據,或讀一個文件,只有等讀完這個數據或文件才能接收下一個消息。在執行這個子函數過程中你什麼也不能幹。但往往讀網路數據和等待用戶輸入有很多時間處於等待狀態,多線程利用這個特點將任務分成多個並發任務後,就可以解決這個問題。Java中的線程類 1.擴展java.lang.Thread類,用它覆蓋Thread類的run方法。 2.生成實現java.lang.Runnable介面的類並將其它的實例與java.lang.Thread實例相關聯。 Thread類是負責向其它類提供線程支持的最主要的類,要使用一個類具有線程功能,在Java中只要簡單地從Thread類派生一個子類就可以了擴展Thread類,如printThread.java。 Thread類最重要的方法是run方法。run方法是新線程執行的方法,因此生成java.lang.Thread的子類時,必須有相應的run方法。 //PrintThread.java public class PrintThread extends Thread//繼承Tread類 private int count=0 //定義一個count變數用於統計列印的次數並共享變數 public static void mainString args//main方法開始 PrintThread p=new PrintThread//創建一個線程實例 p.start//執行線程 for{;;}//主線程main方法執行一個循環,for執行一個死循環count++ System.out.printcount+″:Main\n″//主線程中列印count +「main」變數的值,並換行 public void run//線程類必須有的run()方法for{;;}count++ System.out.printcount+″:Thread\n″ 上面這段程序便是繼承java.lang.Tread並覆蓋run的方法。用Java 虛擬機啟動程序時,這個程序會先生成一個線程並調用程序主類的main方法。這個程序中的main方法生成新線程,連接列印「Thread」。在啟動線程之後,主線程繼續列印「Main」。 編譯並執行這個程序,然後立即按「Ctrl+C」鍵中斷程序,你會看到上面所述的兩個線程不斷列印出:XXX:main…..XXX:Thread…. XXX代表的是數字,也就是上面count的值。在筆者的機器上,不同時刻這兩個線程列印的次數不一樣,先列印20個main(也就是先執行20次主線程)再列印出50次Thread,然後再列印main…… 提示:為了便於查看該程序的執行結果,你可以將執行結果導入一個文本文件,然後打開這個文件查看各線程執行的情況。如運行: javac PrintThread.java Java PrintThread1.txt 第一個命令javac PrintThread.java是編譯java程序,第二個是執行該程序並將結果導入1.txt文件。當然你可以直接執行命令:java