導航:首頁 > 編程語言 > java多線程實例java

java多線程實例java

發布時間:2025-06-04 12:01:50

java 多線程有幾種實現方法

1、繼承Thread類實現多線程
繼承Thread類的方法盡管被我列為一種多線程實現方式,但Thread本質上也是實現了Runnable介面的一個實例,它代表一個線程的實例,並且,啟動線程的唯一方法就是通過Thread類的start()實例方法。start()方法是一個native方法,它將啟動一個新線程,並執行run()方法。這種方式實現多線程很簡單,通過自己的類直接extend Thread,並復寫run()方法,就可以啟動新線程並執行自己定義的run()方法。例如:

[java] view plain
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
}
}
在合適的地方啟動線程如下:

[java] view plain
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();

2、實現Runnable介面方式實現多線程
如果自己的類已經extends另一個類,就無法直接extends Thread,此時,必須實現一個Runnable介面,如下:

[java] view plain
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
為了啟動MyThread,需要首先實例化一個Thread,並傳入自己的MyThread實例:

[java] view plain
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
事實上,當傳入一個Runnable target參數給Thread後,Thread的run()方法就會調用target.run(),參考JDK源代碼:

[java] view plain
public void run() {
if (target != null) {
target.run();
}
}

3、使用ExecutorService、Callable、Future實現有返回結果的多線程
ExecutorService、Callable、Future這個對象實際上都是屬於Executor框架中的功能類。想要詳細了解Executor框架的可以訪問http://www.javaeye.com/topic/366591 ,這裡面對該框架做了很詳細的解釋。返回結果的線程是在JDK1.5中引入的新特徵,確實很實用,有了這種特徵我就不需要再為了得到返回值而大費周折了,而且即便實現了也可能漏洞百出。
可返回值的任務必須實現Callable介面,類似的,無返回值的任務必須Runnable介面。執行Callable任務後,可以獲取一個Future的對象,在該對象上調用get就可以獲取到Callable任務返回的Object了,再結合線程池介面ExecutorService就可以實現傳說中有返回結果的多線程了。下面提供了一個完整的有返回結果的多線程測試例子,在JDK1.5下驗證過沒問題可以直接使用。

Ⅱ java多線程如何創建多個多線程

Java 多線程的同步依靠的是對象鎖機制,這個問題需要我們不斷的學習相關的問題。下面我們就來詳細的學習下如何才能更好的進行具體內容的使用。synchronized關鍵字的背後就是利用了封鎖來實現對共享資源的互斥訪問。
下面以一個簡單的實例來進行對比分析。實例要完成的工作非常簡單,就是創建10個線程,每個線程都列印從0到99這100個數字,我們希望線程之間不會出現交叉亂序列印,而是順序地列印。
先來看第一段代碼,這里我們在run()方法中加入了synchronized關鍵字,希望能對run方法進行互斥訪問,但結果並不如我們希望那樣,這是因為這里synchronized鎖住的是this對象,即當前運行線程對象本身。 Java 多線程代碼中創建了10個線程,而每個線程都持有this對象的對象鎖,這不能實現線程的同步。
Java多線程代碼如下
1.package com.vista;
2.class MyThread implements java.lang.Runnable
3.{
4.private int threadId;
5.public MyThread(int id)
6.{
7.this.threadId = id;
8.}
9.@Override
10.public synchronized void run()
11.{
12.for (int i = 0; i < 100; ++i)
13.{
14.System.out.println("Thread ID: " + this.threadId + " : " + i);
15.}
16.}
17.}
18.public class ThreadDemo
19.{
20./**
21.* @param args
22.* @throws InterruptedException
23.*/
24.public static void main(String[] args) throws InterruptedException
25.{
26.for (int i = 0; i < 10; ++i)
27.{
28.new Thread(new MyThread(i)).start();
29.Thread.sleep(1);
30.}
31.}
32.}
以上就是對Java多線程的詳細代碼介紹。

Ⅲ java多線程有幾種實現方法

Ⅳ java中實現runnable介面多線程技術,用五個線程,生成100個1到1000的隨機數

在Java中,使用Runnable介面實現多線程技術,可以有效提高程序的並發處理能力。下面是一個簡單的例子,通過創建五個線程,每個線程生成1到1000之間的隨機數。

我們定義了一個名為Main的類,其中包含一個靜態變數num,用於計數隨機數的生成次數。在main方法中,我們創建了五個Thread對象,每個線程實例化了RandomRunnable類的一個實例,並啟動了它們。

RandomRunnable類實現了Runnable介面,擁有一個名為name的字元串變數和一個run方法。run方法中包含了生成隨機數的邏輯。通過調用Main類的add方法,每個線程可以向控制台輸出隨機數。

Main類中定義了add方法,用於在控制台列印隨機數。add方法中使用了synchronized關鍵字,確保在同一時間只有一個線程能夠訪問和修改num變數,避免了線程間的數據競爭。

此外,我們還定義了getNum方法,用於獲取當前的計數值。通過這種方式,每個線程可以判斷是否需要生成新的隨機數。

通過這種方式,我們可以有效地利用多線程技術,在多個線程之間分配任務,提高程序的執行效率。

需要注意的是,雖然這個例子展示了如何使用Runnable介面創建多線程,但實際應用中還需要考慮線程安全和其他並發問題,以確保程序的穩定性和可靠性。

通過這個簡單的例子,我們可以了解如何使用Java的多線程技術,實現並發程序設計。希望這個例子能夠幫助大家更好地理解和應用多線程編程

在實際開發過程中,我們還可以通過增加更多的線程或者優化演算法來進一步提高程序的並發性能。同時,還需要注意線程之間的通信和同步問題,以確保程序的正確性和高效性。

總之,Java中的多線程技術為程序開發提供了強大的支持。通過合理地設計和實現多線程程序,我們可以充分利用計算機的多核處理能力,提高程序的運行效率。

最後,希望這個例子能夠為大家提供一些啟示和幫助。如果有任何問題或者需要進一步的幫助,請隨時提問。謝謝大家!

Ⅳ Java涓鍏充簬濡備綍瀹炵幇澶氱嚎紼嬫秷鎮闃熷垪鐨勫疄渚(java澶氱嚎紼嬮氫俊)

java涓鐨勬秷鎮闃熷垪

娑堟伅闃熷垪鏄綰跨▼闂撮氳鐨勬墜孌碉細

importjava.util.*

publicclassMsgQueue{

privateVectorqueue=null;

publicMsgQueue(){

queue=newVector();

}

publicvoidsend(Objecto)

{

queue.addElement(o);

}

publicObjectrecv()

{

if(queue.size()==0)

returnnull;

Objecto=queue.();

queue.(0);//orqueue[0]=nullcanalsowork

returno;

}

}

鍥犱負java涓鏄痩ockedbyobject鐨勬墍浠ユ坊鍔犲氨鍙浠ョ敤浜庣嚎紼嬪悓姝ラ攣瀹氬硅薄

鍙浠ヤ綔涓哄氱嚎紼嬪勭悊澶氫換鍔$殑瀛樻斁task鐨勯槦鍒椼備粬鐨刢lient鍖呮嫭灝佽呭ソ鐨則ask綾諱互鍙妕hread綾

Java鐨勫氱嚎紼-綰跨▼闂寸殑閫氫俊2009-08-2521:58

1.綰跨▼鐨勫嚑縐嶇姸鎬

綰跨▼鏈夊洓縐嶇姸鎬侊紝浠諱綍涓涓綰跨▼鑲瀹氬勪簬榪欏洓縐嶇姸鎬佷腑鐨勪竴縐嶏細

1)浜х敓錛圢ew錛夛細綰跨▼瀵硅薄宸茬粡浜х敓錛屼絾灝氭湭琚鍚鍔錛屾墍浠ユ棤娉曟墽琛屻傚傞氳繃new浜х敓浜嗕竴涓綰跨▼瀵硅薄鍚庢病瀵瑰畠璋冪敤start()鍑芥暟涔嬪墠銆

2)鍙鎵ц岋紙Runnable錛夛細姣忎釜鏀鎸佸氱嚎紼嬬殑緋葷粺閮芥湁涓涓鎺掔▼鍣錛屾帓紼嬪櫒浼氫粠綰跨▼奼犱腑閫夋嫨涓涓綰跨▼騫跺惎鍔ㄥ畠銆傚綋涓涓綰跨▼澶勪簬鍙鎵ц岀姸鎬佹椂錛岃〃紺哄畠鍙鑳芥e勪簬綰跨▼奼犱腑絳夊緟鎺掓帓紼嬪櫒鍚鍔ㄥ畠錛涗篃鍙鑳藉畠宸叉e湪鎵ц屻傚傛墽琛屼簡涓涓綰跨▼瀵硅薄鐨剆tart()鏂規硶鍚庯紝綰跨▼灝卞勪簬鍙鎵ц岀姸鎬侊紝浣嗘樉鑰屾槗瑙佺殑鏄姝ゆ椂綰跨▼涓嶄竴瀹氭e湪鎵ц屼腑銆

3)姝諱骸錛圖ead錛夛細褰撲竴涓綰跨▼姝e父緇撴潫錛屽畠渚垮勪簬姝諱骸鐘舵併傚備竴涓綰跨▼鐨剅un()鍑芥暟鎵ц屽畬姣曞悗綰跨▼灝辮繘鍏ユ諱骸鐘舵併

4)鍋滄粸錛圔locked錛夛細褰撲竴涓綰跨▼澶勪簬鍋滄粸鐘舵佹椂錛岀郴緇熸帓紼嬪櫒灝變細蹇界暐瀹冿紝涓嶅瑰畠榪涜屾帓紼嬨傚綋澶勪簬鍋滄粸鐘舵佺殑綰跨▼閲嶆柊鍥炲埌鍙鎵ц岀姸鎬佹椂錛屽畠鏈夊彲鑳介噸鏂版墽琛屻傚傞氳繃瀵逛竴涓綰跨▼璋冪敤wait()鍑芥暟鍚庯紝綰跨▼灝辮繘鍏ュ仠婊炵姸鎬侊紝鍙鏈夊綋涓ゆ″硅ョ嚎紼嬭皟鐢╪otify鎴杗otifyAll鍚庡畠鎵嶈兘涓ゆ″洖鍒板彲鎵ц岀姸鎬併

2.classThread涓嬬殑甯哥敤鍑芥暟鍑芥暟

2.1suspend()銆乺esume()

1)閫氳繃suspend()鍑芥暟錛屽彲浣跨嚎紼嬭繘鍏ュ仠婊炵姸鎬併傞氳繃suspend()浣跨嚎紼嬭繘鍏ュ仠婊炵姸鎬佸悗錛岄櫎闈炴敹鍒皉esume()娑堟伅錛屽惁鍒欒ョ嚎紼嬩笉浼氬彉鍥炲彲鎵ц岀姸鎬併

2)褰撹皟鐢╯uspend()鍑芥暟鍚庯紝綰跨▼涓嶄細閲婃斁瀹冪殑鈥滈攣鏍囧織鈥濄

渚11錛

classextendsThread{

publicstaticintshareVar=0;

public(Stringname){

super(name);

}

publicvoidrun(){

if(shareVar==0){

for(inti=0;i<5;i){

shareVar;

if(shareVar==5){

this.suspend();//錛1錛

}}}

else{

System.out.print(Thread.().getName());

System.out.println("shareVar="shareVar);

this.resume();//錛2錛

}}

}

publicclassTestThread{

publicstaticvoidmain(String[]args){

t1=new("t1");

t2=new("t2");

t1.start();//錛5錛

//t1.start();//錛3錛

t2.start();//錛4錛

}}

閱讀全文

與java多線程實例java相關的資料

熱點內容
php禁止查看源代碼 瀏覽:985
python中的對象回收 瀏覽:886
編譯器產生之前的計算機 瀏覽:629
程序員老年人 瀏覽:251
無線加密狗教程 瀏覽:761
十年前的安卓機還能幹什麼 瀏覽:255
怎麼到文件夾找到王者回放 瀏覽:624
ad字體文件放在哪個文件夾 瀏覽:127
界面和演算法並行設計 瀏覽:387
oa安卓系統叫什麼 瀏覽:845
兩用u盤加密 瀏覽:118
文件如何解壓再壓縮 瀏覽:622
使用編譯命令導入庫 瀏覽:118
app一般用什麼伺服器 瀏覽:821
手機端java編譯 瀏覽:147
電腦文件夾一右鍵就卡 瀏覽:196
javalistforeach 瀏覽:28
奇葩解壓筆 瀏覽:335
php判斷字元串開頭 瀏覽:270
多個pdf合並成一個pdf 瀏覽:735