亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java線程同步操作實例詳解

2024-07-14 08:42:15
字體:
來源:轉載
供稿:網友

本文實例講述了java線程同步操作。分享給大家供大家參考,具體如下:

java線程同步

public class Hello {  public static void main(String[] args) {    MyRun myRun0 = new MyRun();    new Thread(myRun0, "Thread0").start();    new Thread(myRun0, "Thread1").start();    new Thread(myRun0, "Thread2").start();  }}class MyRun implements Runnable {  private int k = 0;  @Override  public void run() {    for (int i = 0; i < 3; i++) {      System.out.println(Thread.currentThread().getName() + "**********" + i);      k++;      if (k <= 3) {        if ("Thread0".equals(Thread.currentThread().getName())) {          try {            Thread.sleep(100);          } catch (InterruptedException e) {            e.printStackTrace();          }        }        System.out.println(Thread.currentThread().getName() + "," + k);      }    }  }}

輸出結果

Thread0**********0
Thread1**********0
Thread2**********0
Thread1,2
Thread2,3
Thread1**********1
Thread2**********1
Thread2**********2
Thread1**********2
Thread0,7
Thread0**********1
Thread0**********2

說明多線程在某些場景是存在問題的,有時候需要線程同步。

同步 synchronized

同步代碼塊,synchronized(obj){},obj是一個對象,在這里就相當于一把鎖,表示一旦有進程搶到了這把鎖的鑰匙(就是進入了代碼塊),其他進程將無法進入該鎖的代碼塊(當前代碼塊其他進程一定是進不來了,其他地方的代碼塊如果也是用了這把鎖,同樣進不去),只有代碼塊執行完,釋放鎖后,所有進程再重新搶鑰匙。

注意,上同一把鎖的代碼塊都會被鎖住,這些代碼塊可能寫在不同方法不同位置上。

被同步代碼塊包住的代碼多個線程只能順次進入。

synchronized (this) {  k++;  if (k <= 3) {    if ("Thread0".equals(Thread.currentThread().getName())) {      try {        Thread.sleep(100);      } catch (InterruptedException e) {        e.printStackTrace();      }    }    System.out.println(Thread.currentThread().getName() + "," + k);  }}

this表示當前對象,這里考慮的只是運行這個方法,不涉及其它類也不涉及這個類的其它地方需要同步問題,所以用this也是可以的。k增加和輸出一個流程內只能有一個線程在訪問,所以可以得到想要的輸出結果

輸出結果

Thread0**********0
Thread1**********0
Thread2**********0
Thread0,1
Thread0**********1
Thread2,2
Thread2**********1
Thread1,3
Thread1**********1
Thread0**********2
Thread2**********2
Thread1**********2

對方法進行同步,如果存在多線程,每個線程順次訪問該方法

注意,如果一個類里面存在多個同步方法,那么這些同步方法的鎖是一個,都是當前對象,所以不同線程想同時訪問同一對象的不同方法也是不行的,因為這些方法都上了同一把鎖,但是鑰匙只有一把,只能一個線程持有。

@Overridepublic synchronized void run() {  for (int i = 0; i < 3; i++) {    System.out.println(Thread.currentThread().getName() + "**********" + i);    k++;    if (k <= 3) {      if ("Thread0".equals(Thread.currentThread().getName())) {        try {          Thread.sleep(100);        } catch (InterruptedException e) {          e.printStackTrace();        }      }      System.out.println(Thread.currentThread().getName() + "," + k);    }  }}

輸出結果

Thread0**********0
Thread0,1
Thread0**********1
Thread0,2
Thread0**********2
Thread0,3
Thread2**********0
Thread2**********1
Thread2**********2
Thread1**********0
Thread1**********1
Thread1**********2

死鎖

public class Hello {  public static void main(String[] args) {    A a = new A();    B b = new B();    new Thread(new MyRun(a,b)).start();    new Thread(new MyRun1(a,b)).start();  }}class MyRun implements Runnable{  private A a;  private B b;  public MyRun(A a, B b) {    this.a = a;    this.b = b;  }  @Override  public void run(){    a.say(b);  }}class MyRun1 implements Runnable {  private A a;  private B b;  public MyRun1(A a, B b) {    this.a = a;    this.b = b;  }  @Override  public void run() {    b.say(a);  }}class A{  public synchronized void say(B b){    System.out.println("A要知道B的信息");    b.info();  }  public synchronized void info(){    System.out.println("這是A");  }}class B{  public synchronized void say(A a){    System.out.println("B要知道A的信息");    a.info();  }  public synchronized void info(){    System.out.println("這是B");  }}

如果兩個線程同時進入了兩個say方法,就是出現死鎖。

關鍵點在于一個對象的多個同步方法具有相同的鎖,都是當前對象。也就是x線程在訪問a對象的say方法過程中,y線程是無法訪問a對象的info方法的,因為開鎖的鑰匙已經被x線程搶占了。

上面的程序,如果線程x,y同時進入了兩個say方法,a對象同步方法的鎖被線程x搶占,b對象同步方法的鎖被線程y搶占,此時線程x無法訪問b對象的同步方法,線程y無法訪問a對象的同步方法。代碼中恰好想要訪問,所以就出現死鎖了。

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情手机在线视频| 欧美成人自拍视频| 亚洲香蕉成视频在线观看| 国产69精品久久久久9999| www.亚洲天堂| 国产精品久久久久国产a级| 黑人欧美xxxx| 欧洲美女7788成人免费视频| 欧美激情高清视频| 91网在线免费观看| 欧美日韩国产综合新一区| 亚洲精品久久久久久久久久久久| 伊人久久久久久久久久久| 日本一区二区不卡| 久久久国产精品视频| 亚洲伊人久久综合| 久久福利视频导航| 欧美国产日韩一区二区三区| 亚洲大胆人体av| 欧美在线视频免费| 亚洲国产欧美一区| 国产亚洲aⅴaaaaaa毛片| 最近中文字幕日韩精品| 国产精品视频网址| 日韩视频免费看| 国产精品盗摄久久久| 亚洲综合在线小说| 96国产粉嫩美女| 国产乱人伦真实精品视频| 中文字幕日韩视频| 在线观看精品国产视频| 97精品伊人久久久大香线蕉| 日韩美女在线观看| 美女扒开尿口让男人操亚洲视频网站| 日本高清久久天堂| 欧美激情国产日韩精品一区18| 久热99视频在线观看| 国产精品扒开腿爽爽爽视频| 欧美午夜性色大片在线观看| 日韩欧美国产免费播放| 91国产中文字幕| 国产精品综合不卡av| 成人在线激情视频| 日韩电影第一页| 亚洲综合中文字幕在线| 欧美成人在线影院| 日韩欧中文字幕| 国产成+人+综合+亚洲欧美丁香花| 中文字幕欧美日韩在线| 黑人巨大精品欧美一区免费视频| 成人黄色短视频在线观看| 91av成人在线| 国产aaa精品| 亚洲福利视频专区| 国产精品成人av在线| 国产亚洲精品美女久久久| 欧美又大粗又爽又黄大片视频| 国产精品伦子伦免费视频| 色综合五月天导航| 欧美日韩亚洲视频| 久久福利视频导航| 在线激情影院一区| 精品国产一区二区在线| 久久久久免费视频| 伊人成人开心激情综合网| 国产91免费看片| www欧美日韩| 91精品国产成人| 欧美专区在线观看| 欧美日韩国产在线| 97人人模人人爽人人喊中文字| 欧美精品免费在线观看| 国产黑人绿帽在线第一区| 欧美精品手机在线| 成人在线视频网站| 91免费看片在线| 国内精品久久久久久久| 国产日韩欧美在线| 国产亚洲在线播放| 国产一区二区美女视频| 中文字幕av一区| 91性高湖久久久久久久久_久久99| 久久久久久久爱| 在线看片第一页欧美| 久久婷婷国产麻豆91天堂| 欧美成人精品在线观看| 欧美精品成人在线| 久久久久久91香蕉国产| 精品自拍视频在线观看| 亚洲精品一区中文字幕乱码| 在线亚洲男人天堂| 日韩av免费在线播放| 最新国产精品亚洲| 久久久国产影院| 国产成+人+综合+亚洲欧洲| 国产精品羞羞答答| 成人亚洲激情网| 精品国产成人在线| 亚洲在线观看视频网站| 国产视频综合在线| 欧美极品xxxx| 亚洲成av人影院在线观看| 精品欧美一区二区三区| 国产区精品视频| 精品国产91久久久| 韩国精品美女www爽爽爽视频| 亚洲天堂久久av| 亚洲人成在线一二| 欧美理论在线观看| 亚洲自拍偷拍视频| 97人洗澡人人免费公开视频碰碰碰| 日韩成人av在线| 精品久久久久久亚洲精品| 91国产美女视频| 91成品人片a无限观看| 午夜美女久久久久爽久久| 98精品国产高清在线xxxx天堂| 日韩电影中文字幕在线| 色天天综合狠狠色| 欧美黑人一区二区三区| 海角国产乱辈乱精品视频| 成人a级免费视频| 国产精品都在这里| 丝袜情趣国产精品| 久久不射电影网| 亚州成人av在线| 国产91精品黑色丝袜高跟鞋| 亚洲一区制服诱惑| 亚洲欧洲偷拍精品| 91系列在线观看| 久久久久久伊人| 日韩毛片在线看| 欧美疯狂xxxx大交乱88av| 亚洲最大福利视频| 亚洲第一福利在线观看| 亚洲欧美自拍一区| 91大神福利视频在线| 久久天天躁狠狠躁夜夜爽蜜月| 国内外成人免费激情在线视频| 久久视频精品在线| 亚洲 日韩 国产第一| 亚洲欧美三级在线| 日本久久久久久久久| 美女久久久久久久| 97激碰免费视频| 日本久久久久亚洲中字幕| 日韩av网站在线| 亚洲成人激情图| 欧洲精品毛片网站| 国产精品午夜视频| 国产视频在线观看一区二区| 精品精品国产国产自在线| 久久国产精品首页| 久久成人国产精品| 亚洲人成网7777777国产| 欧美亚洲成人网| 国产精品一区二区av影院萌芽| 欧美日韩中文字幕日韩欧美| 精品国产区一区二区三区在线观看| 国产日韩欧美黄色| 精品亚洲一区二区三区在线播放| 欧美日韩国产中文字幕| 日韩中文字幕精品| 26uuu另类亚洲欧美日本一|