淺析Java多線程同步synchronized
單線程是安全的,因?yàn)榫€程只有一個(gè),不存在多個(gè)線程搶奪同一個(gè)資源
代碼例子:
public class SingleThread { int num=10; public void add(){ while(num<13){ num++; try{ Thread.sleep(1000); } catch(Exception e){ System.out.println("中斷"); } System.out.println(num); } } public static void main(String[] args){ Thread thread = Thread.currentThread(); //獲取當(dāng)前運(yùn)行的線程對象 thread.setName("單線程"); //線程重命名 System.out.println(thread.getName()+"正在運(yùn)行"); SingleThread st=new SingleThread(); st.add(); } }
多線程安全,synchronized同步代碼塊
synchronized(對象){}; //同步代碼塊
synchronized 返回值 方法名(){}; //同步方法
class One { int num=10; public void add(){ synchronized(this){ //同步代碼塊,同步方法也可以實(shí)現(xiàn)效果synchronized void add(){}; num++; try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("中斷"); } System.out.println(num); } } } class Two implements Runnable{ One one = new One(); @Override public void run() { one.add(); //調(diào)用add方法 } } public class Synch{ public static void main(String[] args) { Two two = new Two(); Thread t1 = new Thread(two); //創(chuàng)建三個(gè)子線程 Thread t2 = new Thread(two); Thread t3 = new Thread(two); t1.start(); t2.start(); t3.start(); } }
注意:觀察去除synchronized關(guān)鍵字的運(yùn)行結(jié)果區(qū)別!
正常運(yùn)行結(jié)果:
11
12
13
相關(guān)文章
Spring Boot基于Active MQ實(shí)現(xiàn)整合JMS
這篇文章主要介紹了Spring Boot基于Active MQ實(shí)現(xiàn)整合JMS,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot項(xiàng)目優(yōu)雅的全局異常處理方式(全網(wǎng)最新)
這篇文章主要介紹了SpringBoot項(xiàng)目優(yōu)雅的全局異常處理方式(全網(wǎng)最新),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04jmeter壓力測試工具簡介_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了jmeter壓力測試工具相關(guān)介紹資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08在SpringBoot中集成H2數(shù)據(jù)庫的完整指南
Spring Boot是一個(gè)簡化企業(yè)級Java應(yīng)用程序開發(fā)的強(qiáng)大框架,H2數(shù)據(jù)庫是一個(gè)輕量級的、開源的SQL數(shù)據(jù)庫,非常適合用于開發(fā)和測試,本文將指導(dǎo)您如何在Spring Boot應(yīng)用程序中集成H2數(shù)據(jù)庫,并探索一些高級配置選項(xiàng),需要的朋友可以參考下2024-10-10Java中隊(duì)列Queue和Deque的區(qū)別與代碼實(shí)例
學(xué)過數(shù)據(jù)結(jié)構(gòu)的,一定對隊(duì)列不陌生,java也實(shí)現(xiàn)了隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于Java中隊(duì)列Queue和Deque區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-08-08mybatis注解之@Mapper和@MapperScan的使用
這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java Lombok簡介、使用、工作原理、優(yōu)缺點(diǎn)
這篇文章主要介紹了Java Lombok簡介、使用、工作原理、優(yōu)缺點(diǎn)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java Lombok,感興趣的朋友可以了解下2021-03-03maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報(bào)錯(cuò)問題
本地倉庫是遠(yuǎn)程倉庫的一個(gè)緩沖和子集,當(dāng)你構(gòu)建Maven項(xiàng)目時(shí)首先會從本地倉庫查找資源,如果沒有那么Maven會從遠(yuǎn)程倉庫下載到你本地倉庫,這篇文章主要給大家介紹了關(guān)于maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報(bào)錯(cuò)問題的相關(guān)資料,需要的朋友可以參考下2024-01-01