大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

Java同步方法

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

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

 

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 四虎com | 免费一级毛片在播放视频 | 日日操操干干 | 奇米色奇米 | 欧美7777 | 久久777国产线看观看精品卜 | 国产成人午夜片在线观看 | 国产精品久久久久久久久久影院 | 波多野结衣免费一区二区三区香蕉 | 色综合久久加勒比高清88 | 99国产精品视频免费观看 | 久久伊人精品综合观看99 | 成人国产在线不卡视频 | 成人欧美日韩 | 久久这里只有精品国产 | 久久久噜噜噜 | 色偷偷女人的天堂a在线 | 91视频一区 | 欧美久久精品一级c片片 | 99国产成人高清在线视频 | 欧洲成人免费高清视频 | 国产精品国产亚洲精品不卡 | 超级乱淫视频aⅴ播放视频 超级乱淫视频播放日韩 | 日日碰 | 伊人久久网国产伊人 | 久久久精品午夜免费不卡 | 久久精品成人国产午夜 | 久久精品国产线看观看亚洲 | 99热99re8国产在线播放 | 涩涩www在线观看免费高清 | 亚洲国产二区三区 | 麻豆国产精品视频 | 极品粉嫩粉嫩福利视频在线 | 欧美在线日韩 | 国产精品视频观看 | 亚洲一区精品视频在线 | 国产精品视频第一区二区三区 | 黄色wwwwww| 色综合一区二区三区 | 久久久久久综合七次郎 | 亚洲国产日韩欧美mv |