淺析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)行的線程對(duì)象
thread.setName("單線程"); //線程重命名
System.out.println(thread.getName()+"正在運(yùn)行");
SingleThread st=new SingleThread();
st.add();
}
}
多線程安全,synchronized同步代碼塊
synchronized(對(duì)象){}; //同步代碼塊
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)文章
Java fastjson解析json字符串實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java fastjson解析json字符串實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Spring bean加載控制實(shí)現(xiàn)方法
很多時(shí)候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來(lái)選擇是否在容器中加載某個(gè)Bean,這就是Bean的加載控制,一般我們可以通過(guò)編程式或注解式兩種不同的方式來(lái)完成Bean的加載控制2022-12-12
Java通過(guò)工廠、Map容器創(chuàng)建對(duì)象的方法
這篇文章主要介紹了Java通過(guò)工廠、Map容器創(chuàng)建對(duì)象的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解
這篇文章主要介紹了Java常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解,棧(Stack) 是一種基本的數(shù)據(jù)結(jié)構(gòu),具有后進(jìn)先出(LIFO)的特性,類似于現(xiàn)實(shí)生活中的一疊盤子,棧用于存儲(chǔ)一組元素,但只允許在棧頂進(jìn)行插入(入棧)和刪除(出棧)操作,需要的朋友可以參考下2023-10-10
LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法
這篇文章主要介紹了LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10
spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐
SpringSecurity主要實(shí)現(xiàn)了認(rèn)證(Authentication)和授權(quán)(AccessControl),本文就來(lái)介紹一下spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐,感興趣的可以了解一下2025-01-01

