java Thread 多線程
Thread 創(chuàng)建線程的兩種方法:
1、定義類繼承Thread類,覆寫類中的run方法,調(diào)用類對象的start方法,start方法啟動(dòng)線程,調(diào)用run方法。Thread類用于描述線程;該類定義一個(gè)功能run,用于存儲線程要運(yùn)行的代碼。
2、定義類實(shí)現(xiàn)Runnable接口,覆蓋Runnable接口中的方法,通過Thread類建立線程對象,將Runnable接口的子類對象作為實(shí)際參數(shù)傳遞給Thread類的構(gòu)造函數(shù),調(diào)用Thread類的start方法開啟線程,線程會(huì)調(diào)用Runnable接口子類中的run方法;
實(shí)現(xiàn)接口Runnable的方式避免了單繼承帶來的局限性;
Thread T;
T.setMaemon(true);//設(shè)置線程為后臺線程;當(dāng)所有前臺線程結(jié)束后后臺線程自動(dòng)結(jié)束;
T.notify();//喚醒本線程;
T.notifyAll();//喚醒全部線程;
T.interrupt();//中斷線程;
Thread.sleep(100);//暫停線程100毫秒
synchronized:默認(rèn)鎖定的是本身,也可以鎖定自定義的對象;
必須要有兩個(gè)及以上的線程執(zhí)行,多個(gè)線程使用同一個(gè)鎖,必須保證同步過程中只能有一個(gè)線程在運(yùn)行;
判斷同步: 明確哪些代碼是需要多線程運(yùn)行的代碼,明確共享數(shù)據(jù),明確多線程運(yùn)行代碼中哪些語句是操作共享數(shù)據(jù);
class Tickets implements Runnable
{
private int tick = 100;
public void run() { // public synchronized void run()
while (tick > 0) {
synchronized (this) {
if (tick > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.toString() + "sale:" + tick--);
}
}
}
}
如上:tick就是共享數(shù)據(jù),操作tick就需要在synchronized中進(jìn)行操作,synchroized鎖定的就是Tickets本身;
等待喚醒機(jī)制: 在操作同步線程時(shí),都必須要標(biāo)識它們所操作線程所持有的鎖,只有同一個(gè)鎖上的被等待線程,才可以被同一個(gè)鎖上的notify喚醒,不可以對不同鎖中的線程進(jìn)行了喚醒;(也即:等待和喚醒必須是同一個(gè)鎖)
- Java多線程 ThreadLocal原理解析
- java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例
- Java多線程ThreadAPI詳細(xì)介紹
- JAVA多線程Thread和Runnable的實(shí)現(xiàn)
- Java 多線程的同步代碼塊詳解
- Java多線程 兩階段終止模式Two-Phase Termination Patter
- Java多線程 Producer and Consumer設(shè)計(jì)模式
- Java多線程 Guarded Suspension設(shè)計(jì)模式
- Java多線程之Worker Thread模式
相關(guān)文章
SpringBoot整合ElasticSearch的示例代碼
本篇文章主要介紹了SpringBoot整合ElasticSearch的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09java數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的實(shí)例應(yīng)用
大家好,本篇文章主要講的是java數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的實(shí)例應(yīng)用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12實(shí)戰(zhàn)指南:Java編寫Flink?SQL解決難題
想知道如何利用Java編寫Flink?SQL解決難題嗎?本指南將為您揭示最實(shí)用的技巧和策略,讓您輕松應(yīng)對挑戰(zhàn),跟著我們一起探索,讓Java和Flink?SQL成為您問題解決的得力助手!2023-12-12java后端實(shí)現(xiàn)信息分頁查詢的示例代碼
在一個(gè)頁面展示大量的用戶信息不便于觀看,因此就需要采用分頁展示的方法,本文就來為大家介紹一下java后端如何實(shí)現(xiàn)信息分頁查詢,需要的小伙伴可以參考下2023-11-11詳解springboot通過Async注解實(shí)現(xiàn)異步任務(wù)及回調(diào)的方法
這篇文章主要介紹了springboot通過Async注解實(shí)現(xiàn)異步任務(wù)及回調(diào),文中通過一個(gè)簡單示例來直觀的理解什么是同步調(diào)用,在單元測試用例中,注入?SyncTask?對象,并在測試用例中執(zhí)行?doTaskOne(),doTaskTwo(),doTaskThree()?三個(gè)方法,具體實(shí)現(xiàn)方式跟隨小編一起看看吧2022-05-05springboot植入pagerHelper的超詳細(xì)教程
這篇文章主要介紹了springboot植入pagerHelper的超詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01