国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 使用Runnable實現數據共享

使用Runnable實現數據共享

2021-05-17 15:23NewUser2771894007 Java教程

這篇文章主要為大家詳細介紹了如何使用Runnable實現數據共享,具有一定的參考價值,感興趣的小伙伴們可以參考一下

使用runnable實現數據共享,供大家參考,具體內容如下

先上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class testthread {
  private static final logger logger = loggerfactory.getlogger(testthread.class);
 
  private final class myrunnable implements runnable {
    private int i;
    public myrunnable() {
      this.i = 10;
    }
    public void run() {
      while(i > 0) {
        synchronized (this) {
          if (i > 0) {
            i--;
            logger.debug("{} buy one ticket, {} left. ", thread.currentthread().getname(), i);
          }
        }
      }
    }
  }
 
  @test
  public void testrunable() throws interruptedexception{
    myrunnable myrunnable = new myrunnable();
    thread th1 = new thread(myrunnable);
    thread th2 = new thread(myrunnable);
    th1.start();
    th2.start();
    th1.join();
    th2.join();
  }
}

樓上的代碼很簡單,模擬一個售票系統。通過兩個thread對象開啟兩條線程同時運行一個myrunnable實例。

幾個注意點:

1. 沒有加上synchronised關鍵詞的話,即

?
1
2
3
4
5
6
7
8
public void run() {
      while(i > 0) {
        if (i > 0) {
          i--;
          logger.debug("{} buy one ticket, {} left. ", thread.currentthread().getname(), i);
        }
      }
    }

系統的運行結果:

?
1
2
3
4
5
6
7
8
9
10
thread-1 buy one ticket, 8 left.
thread-2 buy one ticket, 8 left.
thread-2 buy one ticket, 6 left.
thread-1 buy one ticket, 6 left.
thread-2 buy one ticket, 5 left.
thread-1 buy one ticket, 4 left.
thread-2 buy one ticket, 3 left.
thread-1 buy one ticket, 2 left.
thread-2 buy one ticket, 1 left.
thread-1 buy one ticket, 0 left.

可以看到,缺少同步的程序輸出明顯有問題。

2. 在進入同步代碼塊之后,還需要對i的值再進行一次判斷,即,如果不加if判斷:

?
1
2
3
4
5
6
7
8
9
public void run() {
      while(i > 0) {
        synchronized (this) {
          i--;
          logger.debug("{} buy one ticket, {} left. ", thread.currentthread().getname(), i);
 
        }
      }
    }

程序的運行結果為:

?
1
2
3
4
5
6
7
8
9
10
11
thread-2 buy one ticket, 9 left.
thread-2 buy one ticket, 8 left.
thread-2 buy one ticket, 7 left.
thread-2 buy one ticket, 6 left.
thread-2 buy one ticket, 5 left.
thread-2 buy one ticket, 4 left.
thread-2 buy one ticket, 3 left.
thread-2 buy one ticket, 2 left.
thread-2 buy one ticket, 1 left.
thread-2 buy one ticket, 0 left.
thread-1 buy one ticket, -1 left.

可以看出,出現了“多賣”的現象, 所以需要在進入同步代碼塊中再進行一次if判斷。

總結

synchronised用于互斥訪問共享變量, 并在同步代碼塊中使用if判斷更新共享變量。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/NewUser2771894007/article/details/79630721

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精品一区二区三区在线播放 | 亚洲高清在线观看 | 欧美日韩高清不卡 | 成人涩涩日本国产一区 | 丝袜久久| 国产美女久久久 | 日韩在线永久免费播放 | 北条麻妃一区二区三区中文字幕 | 亚洲性视频 | 欧美一区二区在线观看 | 国产精品免费av | 色视频在线免费看 | 久久777| 欧美精品一区二区三区四区在线 | 一特黄a大片免费视频 视频 | 欧美国产在线视频 | 中文字幕视频一区 | 国产黄色大片免费在线观看 | 四虎影院在线免费播放 | 激情六月婷 | 亚洲成人久久久 | 亚洲国产精 | 伊人二区 | 欧美日韩精品免费观看 | 高清三区| 精品天堂 | 麻豆乱码国产一区二区三区 | 欧美中文在线 | 免费视频黄 | 国产成人av在线播放 | 亚洲精品视频在线播放 | 91九色视频国产 | 欧美日韩亚洲一区二区 | 国产黄色电影 | 9l蝌蚪porny中文自拍 | 永久看片| 欧美高清性xxxxhdvideosex | 中文字幕精品一区二区三区精品 | 搞黄视频在线观看 | 91极品视频在线观看 | 久久国产精品一区二区 |