黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java同步方法

Java同步方法

更新時間:2022-06-15 10:36:22 來源:動力節點 瀏覽1200次

Java中的同步是控制多個線程對任何共享資源的訪問的能力。

在我們希望只允許一個線程訪問共享資源的情況下,Java 同步是更好的選擇。

為什么要使用同步?

同步主要用于

防止線程干擾。

防止一致性問題。

同步類型

有兩種類型的同步

進程同步

線程同步

在這里,我們將只討論線程同步。

線程同步

線程同步有互斥和線程間通信兩種。

1.互斥

同步方法。

同步塊。

靜態同步。

2.協作(java中的線程間通信)

互斥

互斥有助于防止線程在共享數據時相互干擾。可以通過以下三種方式實現:

1.通過使用同步方法

2.通過使用同步塊

3.通過使用靜態同步

Java中鎖的概念

同步是圍繞稱為鎖或監視器的內部實體構建的。每個對象都有一個與之關聯的鎖。按照慣例,需要對對象字段進行一致訪問的線程必須在訪問對象之前獲取對象的鎖,然后在完成訪問時釋放鎖。

從 Java 5 開始,包 java.util.concurrent.locks 包含多個鎖實現。

在沒有同步的情況下理解問題

在這個例子中,沒有同步,所以輸出不一致。讓我們看看這個例子:

TestSynchronization1.java

class Table{  
void printTable(int n){//method not synchronized  
   for(int i=1;i<=5;i++){  
     System.out.println(n*i);  
     try{  
      Thread.sleep(400);  
     }catch(Exception e){System.out.println(e);}  
   }  
  
 }  
}    
class MyThread1 extends Thread{  
Table t;  
MyThread1(Table t){  
this.t=t;  
}  
public void run(){  
t.printTable(5);  
}    
}  
class MyThread2 extends Thread{  
Table t;  
MyThread2(Table t){  
this.t=t;  
}  
public void run(){  
t.printTable(100);  
}  
}   
class TestSynchronization1{  
public static void main(String args[]){  
Table obj = new Table();//only one object  
MyThread1 t1=new MyThread1(obj);  
MyThread2 t2=new MyThread2(obj);  
t1.start();  
t2.start();  
}  
}  

輸出:

       5
       100
       10
       200
       15
       300
       20
       400
       25
       500

Java同步方法

如果您將任何方法聲明為同步,則稱為同步方法。

同步方法用于為任何共享資源鎖定對象。

當線程調用同步方法時,它會自動獲取該對象的鎖,并在線程完成其任務時釋放它。

TestSynchronization2.java

//example of java synchronized method  
class Table{  
 synchronized void printTable(int n){//synchronized method  
   for(int i=1;i<=5;i++){  
     System.out.println(n*i);  
     try{  
      Thread.sleep(400);  
     }catch(Exception e){System.out.println(e);}  
   }  
  
 }  
}    
class MyThread1 extends Thread{  
Table t;  
MyThread1(Table t){  
this.t=t;  
}  
public void run(){  
t.printTable(5);  
}    
}  
class MyThread2 extends Thread{  
Table t;  
MyThread2(Table t){  
this.t=t;  
}  
public void run(){  
t.printTable(100);  
}  
}    
public class TestSynchronization2{  
public static void main(String args[]){  
Table obj = new Table();//only one object  
MyThread1 t1=new MyThread1(obj);  
MyThread2 t2=new MyThread2(obj);  
t1.start();  
t2.start();  
}  
}  

輸出:

       5 
       10 
       15 
       20 
       25 
       100 
       200 
       300 
       400 
       500

使用匿名類的同步方法示例

在這個程序中,我們使用匿名類創建了兩個線程,因此需要較少的編碼。

TestSynchronization3.java

//Program of synchronized method by using annonymous class  
class Table{  
 synchronized void printTable(int n){//synchronized method  
   for(int i=1;i<=5;i++){  
     System.out.println(n*i);  
     try{  
      Thread.sleep(400);  
     }catch(Exception e){System.out.println(e);}  
   }  
  
 }  
}    
public class TestSynchronization3{  
public static void main(String args[]){  
final Table obj = new Table();//only one object    
Thread t1=new Thread(){  
public void run(){  
obj.printTable(5);  
}  
};  
Thread t2=new Thread(){  
public void run(){  
obj.printTable(100);  
}  
};    
t1.start();  
t2.start();  
}  
}  

輸出:

       5
       10
       15
       20
       25
       100
       200
       300
       400
       500

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久综合狠狠综合久久97色 | 国产亚洲第一伦理第一区 | 久热精品男人的天堂在线视频 | 秋霞国产一级特黄 | 欧美激情在线精品video | 天天操夜夜操视频 | 特级黄色毛片视频 | 麻豆成人在线视频 | 日韩手机在线观看 | 丁香网五月 | 亚洲欧美日韩国产综合专区 | 在线成年人视频 | 男女视频免费网站 | 中国性xxx免费视频 中国野外性xxxx | 欧美一区视频在线 | 国产成人精品.一二区 | 欧美性色黄在线视 | 久久久高清日本道免费观看 | 久久精品国产日本波多麻结衣 | 色多多污网站 | 亚洲成年人网 | 性刺激欧美三级在线观看 | 日本三级黄色片 | 欧美一区二区三区高清视频 | 动漫精品专区一区二区三区不卡 | 欧美日韩中文字幕在线手机版本 | 久久er国产精品免费观看2 | 久热精品视频 | 在线观看免费国产视频 | 日日操日日插 | 性欧美极品 | 中文字幕在线导航 | 午夜视频在线观看完整高清在线 | 色丝瓜视频| 欧美在线观看一区二区三 | 五月天婷婷视频在线观看 | 国产一级高清视频免费看 | 日日艹夜夜 | 国产色视频在线观看免费 | 国产欧美精品一区二区色综合 | 久久精品2019www中文 |