日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java多线程的几种实现方式

發(fā)布時(shí)間:2024/3/26 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程的几种实现方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


1.繼承Thread類,重寫run方法

Thread類本質(zhì)上是實(shí)現(xiàn)了Runnable接口的一個(gè)實(shí)例。因此,啟動(dòng)線程的唯一方式就是通過(guò)Thread類的start()方法,start()方法是個(gè)native方法,它會(huì)啟動(dòng)一個(gè)新的線程,并執(zhí)行run()方法。

/*** Create By CodeCow on 2020/8/3.*/ public class TestThread {public static void main(String[] args) {MyThread mt = new MyThread("新線程————看大片");//開啟新線程mt.start();//在主方法中執(zhí)行for循環(huán)for (int i = 0; i < 5; i++) {System.out.println("main線程————擼代碼,沒意思。。" + i);}}//繼承Thread類public static class MyThread extends Thread {//定義指定線程名稱的構(gòu)造方法public MyThread(String name) {//調(diào)用父類的String參數(shù)的構(gòu)造方法,指定線程的名稱(原理:利用繼承特點(diǎn),將線程名稱傳遞)super(name);}//重寫run方法,定義線程要執(zhí)行的代碼@Overridepublic void run() {for (int j = 0; j < 5; j++) {//getName()方法 來(lái)自父親(就是Thread類中,獲取當(dāng)前線程名稱方法)System.out.println(getName() + " :好刺激喲,不行了,快、快。。" + j);}}} }

2.實(shí)現(xiàn)Runnable接口,重寫run方法

Runnable接口從“Java1.0”就已經(jīng)有了,它內(nèi)部只有一個(gè)抽象方法run()。因此:要啟動(dòng)線程就要實(shí)現(xiàn)Runnable接口并重寫它的run()方法。

注意:由于Java不支持多繼承,如果自己的類已經(jīng)繼承了其他類,要啟動(dòng)線程就要實(shí)現(xiàn)Runnable接口并重寫它的run()方法

/*** Create By CodeCow on 2020/8/3.*/ public class TestRunnable implements Runnable{//重寫run()方法, 寫自己需要的代碼@Overridepublic void run() {for (int i = 0; i < 5; i++) {//currentThread() 返回對(duì)當(dāng)前正在執(zhí)行的線程對(duì)象的引用System.out.println(Thread.currentThread().getName()+" :好刺激喲,不行了,快、快。。" + i);}}public static void main(String[] args) {//創(chuàng)建自定義類對(duì)象 線程任務(wù)對(duì)象TestRunnable mr = new TestRunnable();//創(chuàng)建線程對(duì)象Thread t = new Thread(mr, "新線程————看大片(正經(jīng)人別多想)");t.start();for (int i = 0; i < 5; i++) {System.out.println("main線程————擼代碼,沒意思。。" + i);}} }

3.實(shí)現(xiàn)Callable接口

Runnable是執(zhí)行工作的獨(dú)立任務(wù),但是不返回任何值。如果我們希望任務(wù)完成之后有返回值,可以實(shí)現(xiàn)Callable接口

/*** Create By CodeCow on 2020/8/3.*/ @Slf4j public class TestCallable implements Callable<String> {public static void main(String[] args) throws ExecutionException, InterruptedException {ExecutorService executorService = Executors.newCachedThreadPool();TestCallable testCallable = new TestCallable();Future<String> future = executorService.submit(testCallable);log.info("future: " + future.get()); //get會(huì)阻塞executorService.shutdown();}@Overridepublic String call() throws Exception {return "帶含有返回值的線程";} }

4.通過(guò)線程池創(chuàng)建線程

創(chuàng)建線程的方式就是繼承Thread,線程池也不例外,創(chuàng)建好的線程對(duì)象來(lái)執(zhí)行任務(wù)

總結(jié)

以上是生活随笔為你收集整理的java多线程的几种实现方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。