大战熟女丰满人妻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

 

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 高清黄色毛片 | 九九99九九视频在线观看 | 性欧美video另类hd亚洲人 | 99久久国内精品成人免费 | 国产福利视频深夜福利 | 欧美成人综合视频 | 亚洲精品久久激情影院 | 久久99亚洲精品久久久久99 | 99久久国产免费福利 | 婷综合| 国产精品美女免费视频大全 | 91尤物视频 | 亚洲国产精品久久久天堂 | 国产精品播放 | 国内毛片视频 | 亚洲狼人综合干 | 欧美一区二区手机在线观看视频 | 天天爱夜夜爽 | 亚洲乱码在线视频 | 五月婷婷激情在线 | 四虎国产视频 | 日韩在线观看视频网站 | 欧美一级视频在线观看欧美 | 99热首页| 免费香蕉依人在线视频久 | 91xav在线| 久久久久久久久亚洲 | 日韩欧美国产高清在线观看 | 久久成人精品视频 | 国产精品亚洲一区二区在线观看 | 欧美精品网 | 亚洲国产精品成人午夜在线观看 | 欧美日韩国产人成在线观看 | 香蕉视频在线免费播放 | 香蕉久久a毛片 | 亚洲国产欧美日韩一区二区三区 | 欧美一级毛片国产一级毛片 | 九月婷婷天天澡天天添天天爽 | 四虎在线永久免费观看 | 9191精品国产费久久 | 一本到中文字幕高清不卡在线 |