java實現(xiàn)多線程的兩種方式繼承Thread類和實現(xiàn)Runnable接口的方法
實現(xiàn)方式和繼承方式有什么區(qū)別呢?
*區(qū)別:
*繼承Thread:線程代碼存放在Thread子類run方法中
*實現(xiàn)Runnable:線程代碼存放在接口的子類的run方法中
*實現(xiàn)方式的好處:避免了單繼承的局限性
*在定義線程時,建議使用實現(xiàn)方式,當(dāng)然如果一個類沒有繼承父類,那么也可以通過繼承Thread類來實現(xiàn)多線程
*注意:Runnable接口沒有拋出異常,那么實現(xiàn)它的類只能是try-catch不能throws
*Java對多線程的安全問題提供了專業(yè)的解決方式就是同步代碼塊synchronized(對象){需要同步的代碼}
*同步的前提:
*1.有2個及以上的線程
*2.多個線程使用用一個鎖(對象)
*同步的好處:解決了多線程的安全問題
*同步的弊端:多個線程需要判斷鎖,較為消耗資源
package 多線程; class Ticket implements Runnable { // private static int tick = 100; private int tick=100; Object obj = new Object();//創(chuàng)建一個對象或者自己重新寫一個類來創(chuàng)建一個對象下面同步關(guān)鍵字需要用到 @Override public void run() { while(true) { synchronized(obj) // synchronized(this) { if(tick>0){ try {Thread.sleep(10);} catch (Exception e) { } System.out.println(Thread.currentThread().getName()+"...銷售:"+(tick--)+"號票"); // tick--; }else { break; } } } } } public class Test { public static void main(String[] args) { Ticket t = new Ticket();//創(chuàng)建一個實現(xiàn)了Runnable接口的類 //創(chuàng)建4個多線程對象并傳遞上面接口對象給其構(gòu)造方法 Thread t1 = new Thread(t);//創(chuàng)建了一個線程 Thread t2 = new Thread(t);//創(chuàng)建了一個線程 Thread t3 = new Thread(t);//創(chuàng)建了一個線程 Thread t4 = new Thread(t);//創(chuàng)建了一個線程 //開啟線程 t1.start(); t2.start(); t3.start(); t4.start(); } }
以上就是小編為大家?guī)淼膉ava實現(xiàn)多線程的兩種方式繼承Thread類和實現(xiàn)Runnable接口的方法的全部內(nèi)容了,希望對大家有所幫助,多多支持腳本之家~
相關(guān)文章
SpringBoot + SpringSecurity 短信驗證碼登錄功能實現(xiàn)
這篇文章主要介紹了SpringBoot + SpringSecurity 短信驗證碼登錄功能實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06Java?Maven構(gòu)建工具中mvnd和Gradle誰更快
這篇文章主要介紹了Java?Maven構(gòu)建工具中mvnd和Gradle誰更快,mvnd?是?Maven?Daemon?的縮寫?,翻譯成中文就是?Maven?守護進(jìn)程,下文更多相關(guān)資料,需要的小伙伴可以參考一下2022-05-05SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實現(xiàn)方式
SpringBoot支持多種配置文件位置和格式,其中application.properties和application.yml是默認(rèn)加載的文件,配置文件可以根據(jù)環(huán)境通過spring.profiles.active屬性進(jìn)行區(qū)分,命令行參數(shù)具有最高優(yōu)先級,可覆蓋其他所有配置2024-09-09SpringBoot?@RestControllerAdvice注解對返回值統(tǒng)一封裝的處理方法
這篇文章主要介紹了SpringBoot?@RestControllerAdvice注解對返回值統(tǒng)一封裝,使用@RestControllerAdvice對響應(yīng)進(jìn)行增強,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09解決SpringBoot整合ElasticSearch遇到的連接問題
這篇文章主要介紹了解決SpringBoot整合ElasticSearch遇到的連接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08解決Jackson解析嵌套類問題(MismatchedInputException)
這篇文章主要介紹了解決Jackson解析嵌套類問題(MismatchedInputException),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06Springboot實現(xiàn)全局自定義異常的方法詳解
這篇文章主要介紹了Springboot實現(xiàn)全局自定義異常的方法詳解,SpringBoot的項目已經(jīng)對有一定的異常處理了,但是對于我們開發(fā)者而言可能就不太合適了,因此我們需要對這些異常進(jìn)行統(tǒng)一的捕獲并處理,需要的朋友可以參考下2023-11-11RabbitMQ開啟SSL與SpringBoot連接測試的配置方法
本文基于 CentOS 7 + Git + OpenSSL + yum 安裝的 RabbitMQ,需要讀者提交安裝好。其他方式也可變通參考本文。對RabbitMQ開啟SSL與SpringBoot連接測試相關(guān)知識感興趣的朋友一起看看吧2022-01-01