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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java 中多線程生產(chǎn)者消費者問題詳細(xì)介紹

java 中多線程生產(chǎn)者消費者問題詳細(xì)介紹

2021-01-05 11:16CC小觀 Java教程

這篇文章主要介紹了java 中多線程生產(chǎn)者消費者問題詳細(xì)介紹的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下

java 中多線程生產(chǎn)者消費者問題

前言:

一般面試喜歡問些線程的問題,較基礎(chǔ)的問題無非就是死鎖,生產(chǎn)者消費者問題,線程同步等等,在前面的文章有寫過死鎖,這里就說下多生產(chǎn)多消費的問題了

?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import java.util.concurrent.locks.*;
 
class BoundedBuffer {
  final Lock lock = new ReentrantLock();//對象鎖
  final Condition notFull = lock.newCondition(); //生產(chǎn)者監(jiān)視器
  final Condition notEmpty = lock.newCondition(); //消費者監(jiān)視器
 
  //資源對象
  final Object[] items = new Object[10];
  //putptr生產(chǎn)者角標(biāo),takeptr消費者角標(biāo),count計數(shù)器(容器的實際長度)
  int putptr, takeptr, count;
 
  public void put(Object x) throws InterruptedException {
    //生產(chǎn)者拿到鎖
   lock.lock();
   try {
     //當(dāng)實際長度不滿足容器的長度
    while (count == items.length)
      //生產(chǎn)者等待
     notFull.await();
    //把生產(chǎn)者產(chǎn)生對象加入容器
    items[putptr] = x;
    System.out.println(Thread.currentThread().getName()+"   put-----------"+count);
    Thread.sleep(1000);
    //如果容器的實際長==容器的長,生產(chǎn)者角標(biāo)置為0
    if (++putptr == items.length) putptr = 0;
    ++count;
    //喚醒消費者
    notEmpty.signal();
   } finally {
     //釋放鎖
    lock.unlock();
   }
  }
 
  public Object take() throws InterruptedException {
   lock.lock();
   try {
    while (count == 0)
      //消費者等待
     notEmpty.await();
    Object x = items[takeptr];
    System.out.println(Thread.currentThread().getName()+"   get-----------"+count);
    Thread.sleep(1000);
    if (++takeptr == items.length) takeptr = 0;
    --count;
    //喚醒生產(chǎn)者
    notFull.signal();
    return x;
   } finally {
     //釋放鎖
    lock.unlock();
   }
  }
 }
 
class Consu implements Runnable{
  BoundedBuffer bbuf;
 
  public Consu(BoundedBuffer bbuf) {
    super();
    this.bbuf = bbuf;
  }
 
  @Override
  public void run() {
    while(true){
    try {
      bbuf.take() ;
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    }
  }
 
}
class Produ implements Runnable{
  BoundedBuffer bbuf;
  int i=0;
  public Produ(BoundedBuffer bbuf) {
    super();
    this.bbuf = bbuf;
  }
 
  @Override
  public void run() {
    while(true){
      try {
        bbuf.put(new String(""+i++)) ;
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
 
}
 
 
 
//主方法
class Lock1{
  public static void main(String[] args) {
    BoundedBuffer bbuf=new BoundedBuffer();
    Consu c=new Consu(bbuf);
    Produ p=new Produ(bbuf);
    Thread t1=new Thread(p);
    Thread t2=new Thread(c);
    t1.start();
    t2.start();
    Thread t3=new Thread(p);
    Thread t4=new Thread(c);
    t3.start();
    t4.start();
  }
}

這個是jdk版本1.5以上的多線程的消費者生產(chǎn)者問題,其中優(yōu)化的地方是把synchronized關(guān)鍵字進行了步驟拆分,對對象的監(jiān)視器進行了拆離,synchronized同步,隱式的建立1個監(jiān)聽,而這種可以建立多種監(jiān)聽,而且喚醒也優(yōu)化了,之前如果是synchronized方式,notifyAll(),在只需要喚醒消費者或者只喚醒生產(chǎn)者的時候,這個notifyAll()將會喚醒所有的凍結(jié)的線程,造成資源浪費,而這里只喚醒對立方的線程。代碼的解釋說明,全部在源碼中,可以直接拷貝使用。

如有疑問請留言或者到本站社區(qū)交流討論,希望通過本文能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_37347341/article/details/77751226

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产www视频| 久久精品亚洲一区 | 热久久久久 | 中文字幕在线视频观看 | 91精品久久久久久久久久久 | 亚洲一区二区三区高清 | 精品久草| 一区二区三区成人久久爱 | 欧美一区二区公司 | 黑森林av凹凸导航 | 国产乱叫456 | 国产色视频 | 色花av| 欧美一级特黄在线观看 | 久久99精品久久久久久水蜜桃 | 久久久久久国产免费 | 亚洲精品在线免费看 | 涩涩视频观看 | 免费啪啪av乱一区 | 成人激情视频免费在线观看 | 中文字幕一区二区三区四区五区 | 另类国产ts人妖高潮系列视频 | 国产伦乱 | 日本久久久久久 | 激情久久综合网 | 成人在线精品 | 激情五月激情综合网 | 国产精品福利在线 | 成人久久久久久久久 | 黄色一级毛片儿 | 日韩国产一区二区 | 国产精品视频一区二区三区 | 欧美 日韩 国产 一区 | 欧美日韩精品一区二区三区 | 超黄毛片 | 国产伦精品一区二区三区四区视频 | 爱草在线| 九色在线 | 可以看的毛片网站 | 午夜精品久久久久久久99黑人 | 亚州国产 |