今天小編給大家分享的是關(guān)于java多線程的創(chuàng)建及啟動介紹,很多人都不太了解,今天小編為了讓大家更加了解java多線程,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會有所收獲的哦
在漢源等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設計制作定制網(wǎng)站開發(fā),公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站制作,漢源網(wǎng)站建設費用合理。Java中線程的創(chuàng)建常見有如三種基本形式:
一、繼承Thread類,重寫該類的run()方法
繼承Thread類,重寫該類的run()方法
public class MyThread extends Thread{ @Override public void run() { for (int i = 0 ;i < 50;i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } } public static void main(String[] args) { for (int i = 0;i<50;i++) { //調(diào)用Thread類的currentThread()方法獲取當前線程 System.out.println(Thread.currentThread().getName() + " " + i); if (i == 10) { new MyThread().start(); new MyThread().start(); } } } }
運行結(jié)果:
... main 48 main 49 Thread-0:0 Thread-0:1 Thread-0:2 Thread-0:3 Thread-0:4 Thread-1:0 ...
從結(jié)果中可以看出:
1、有三個線程:main、Thread-0 、Thread-1;
2、Thread-0 、Thread-1兩個線程輸出的成員變量 i 的值不連續(xù)(這里的 i 是實例變量而不是局部變量)。因為:通過繼承Thread類實現(xiàn)多線程時,每個線程的創(chuàng)建都要創(chuàng)建不同的子類對象,導致Thread-0 、Thread-1兩個線程不能共享成員變量 i ;
3、線程的執(zhí)行是搶占式,并沒有說Thread-0 或者Thread-1一直占用CPU(這也與線程優(yōu)先級有關(guān),這里Thread-0 、Thread-1線程優(yōu)先級相同,關(guān)于線程優(yōu)先級的知識這里不做展開)
(學習視頻推薦:java視頻教程)
二、通過實現(xiàn)Runnable接口創(chuàng)建線程類
定義一個類實現(xiàn)Runnable接口;創(chuàng)建該類的實例對象obj;將obj作為構(gòu)造器參數(shù)傳入Thread類實例對象,這個對象才是真正的線程對象。
public class MyRunnable implements Runnable { @Override public void run() { for (int i = 0 ;i < 50 ;i++) { System.out.println(Thread.currentThread().getName()+":" +i); } } public static void main(String[] args) { for (int i = 0;i < 50;i++) { System.out.println(Thread.currentThread().getName() + ":" +i); if (i == 10) { MyRunnable myRunnable = new MyRunnable(); new Thread(myRunnable).start(); new Thread(myRunnable).start(); } } //java8 labdam方式 new Thread(() -> { System.out.println(Thread.currentThread().getName()); },"線程3").start(); } }
運行結(jié)果:
... main:46 main:47 main:48 main:49 Thread-0:28 Thread-0:29 Thread-0:30 Thread-1:30 ...
1、線程1和線程2輸出的成員變量i是連續(xù)的,也就是說通過這種方式創(chuàng)建線程,可以使多線程共享線程類的實例變量,因為這里的多個線程都使用了同一個target實例變量。但是,當你使用上述的代碼運行的時候,你會發(fā)現(xiàn),其實結(jié)果有些并不連續(xù),這是因為多個線程訪問同一資源時,如果資源沒有加鎖,那么會出現(xiàn)線程安全問題;
2、java8 可以使用lambda方式創(chuàng)建多線程。
三、通過Callable和Future接口創(chuàng)建線程
創(chuàng)建Callable接口實現(xiàn)類,并實現(xiàn)call()方法,該方法將作為線程執(zhí)行體,且該方法有返回值,再創(chuàng)建Callable實現(xiàn)類的實例;使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值;使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動新線程;調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值。
public class MyCallable implements Callable<Integer> { private int i = 0; @Override public Integer call() throws Exception { int sum = 0; for (; i < 100; i++) { System.out.println(Thread.currentThread().getName() + " " + i); sum += i; } return sum; } public static void main(String[] args) throws ExecutionException, InterruptedException { // 創(chuàng)建MyCallable對象 Callable<Integer> myCallable = new MyCallable(); //使用FutureTask來包裝MyCallable對象 FutureTask<Integer> ft = new FutureTask<Integer>(myCallable); for (int i = 0;i<50;i++) { System.out.println(Thread.currentThread().getName() + ":" + i); if (i == 30) { Thread thread = new Thread(ft); thread.start(); } } System.out.println("主線程for循環(huán)執(zhí)行完畢.."); Integer integer = ft.get(); System.out.println("sum = "+ integer); } }
call()方法的返回值類型與創(chuàng)建FutureTask對象時<>里的類型一致。
以上就是關(guān)于java多線程的創(chuàng)建及啟動的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領(lǐng)會。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道哦!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:關(guān)于java多線程的創(chuàng)建及啟動介紹-創(chuàng)新互聯(lián)
URL分享:http://jinyejixie.com/article46/dhoshg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、外貿(mào)建站、網(wǎng)站改版、企業(yè)建站、全網(wǎng)營銷推廣、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)