一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 视频高h| 精品视频在线观看免费 | 亚洲AV人无码综合在线观看蜜桃 | 久草热8精品视频在线观看 久草草在线视视频 | 欧美生活一级片 | 亚洲AV国产福利精品在现观看 | 95视频在线观看在线分类h片 | 99免费精品| 精品视频入口 | 5x社区在线观看直接进入 | 交换年轻夫妇HD中文字幕 | 国产真实一区二区三区 | 美女私人影院 | 亚洲性久久久影院 | 性柔术18性13处交 | 农村妇女野外性生话免费视频 | 国产欧美亚洲精品第一页青草 | 久久久久综合 | 国产精品 视频一区 二区三区 | 成人久久18免费网站入口 | 亚洲激情成人 | 99久久免费精品视频 | 日本狠狠操| 免费欧美一级片 | 无人视频在线观看完整版高清 | 亚洲 欧美 日本 国产 高清 | 暖暖的免费观看高清视频韩国 | 午夜AV亚洲一码二中文字幕青青 | japonensis中国东北老人 | 国色天香社区在线 | 国产资源中文字幕 | 国产三级自拍视频 | 妇乱子伦激情 | 色综合天天娱乐综合网 | 动漫美女强行被吸乳做羞羞事 | 国产精品理论片在线观看 | 加勒比一本大道香蕉在线视频 | 国产外围 | 深夜激情网 | 无人区尖叫之夜美女姐姐视频 | 国产成人综合网亚洲欧美在线 |