第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請(qǐng)問,如果我要再多加一個(gè)消費(fèi)者,Bprocessed該如何做呢?

請(qǐng)問,如果我要再多加一個(gè)消費(fèi)者,Bprocessed該如何做呢?

動(dòng)漫人物 2022-05-28 13:09:06
package buffer;public class BufferLock //加互斥?的???{private int value; //共享?量private boolean isEmpty = true; //value是否?空的信?量public synchronized void put(int i) //同步方法{while (!isEmpty) //?value不空?,等待{try{this.wait(); //使?用?方法的?前?程等待,即阻塞自己}catch(InterruptedException e) {}}value = i; //?value空?,value?得值isEmpty = false; //?置value?不空??notify(); //?醒其他等待?程}public synchronized int get() //同步方法{while (isEmpty) //?value空?,等待{try{this.wait();}catch(InterruptedException e) {}}isEmpty = true; //?置value?空??,并返回值notify();return value;}}class Pproduced extends Thread //?送?程?{private BufferLock buffer;public Pproduced(BufferLock buffer){this.buffer = buffer;}public void run( ){for (int i=1;i<20;i++){buffer.put( i );System.out.println("P produced : " + i );}}}class Aprocessed extends Thread //接收?程?{private BufferLock buffer;public Aprocessed(BufferLock buffer){this.buffer = buffer ;}public void run(){for (int i=1; i<20;i++)System.out.println("\t\t\t A processed : " + buffer.get()) ;}public static void main (String args[]){BufferLock buffer = new BufferLock();(new Pproduced(buffer)).start();(new Aprocessed(buffer)).start();}誰知道當(dāng)Pproduced ,去到 Pproduced 5的時(shí)候,可以叫 processed 先消費(fèi)嗎,實(shí)際上沒看過有生產(chǎn)者生產(chǎn)超過5個(gè)以上,消費(fèi)者還沒消費(fèi)請(qǐng)問,我要再多加一個(gè)消費(fèi)者,Bprocessed 如何做呢,加了有bug...希望完整解答謝謝.順序的消費(fèi)P produced : 1A processed : 1P produced : 2 B processed 2P produced : 3 A processed : 3P produced : 4 B processed 4
查看完整描述

1 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

package com.wormwood.thread;

import java.util.LinkedList;

public class BufferLock //加互斥?的???
{
private LinkedList<Integer> stack = new LinkedList<Integer>();

public synchronized void put(int i) //同步方法
{
stack.push(new Integer(i)); //?value空?,value?得值
}

public synchronized int get() //同步方法
{
int value = 0;
if(!stack.isEmpty())
{
value = stack.removeFirst().intValue();
}
return value;
}

public static void main (String args[])
{
BufferLock buffer = new BufferLock();
(new Pproduced(buffer)).start();
(new Aprocessed(buffer)).start();
}
}

class Pproduced extends Thread //?送?程?
{
private BufferLock buffer;

public Pproduced(BufferLock buffer)
{
this.buffer = buffer;
}

public void run( )
{
for (int i=1;i<20;i++)
{
buffer.put( i );
System.out.println("P produced : " + i );
}
}
}

class Aprocessed extends Thread //接收?程?
{
private BufferLock buffer;

public Aprocessed(BufferLock buffer)
{
this.buffer = buffer ;
}

public void run()
{
for (int i=1; i<20;i++)
System.out.println("\t\t\t A processed : " + buffer.get()) ;
}
}

運(yùn)行情況:
P produced : 1
P produced : 2
P produced : 3
P produced : 4
P produced : 5
P produced : 6
A processed : 1
A processed : 7
A processed : 6
P produced : 7
A processed : 5
P produced : 8
A processed : 8
P produced : 9
A processed : 9
P produced : 10
P produced : 11
P produced : 12
A processed : 10
P produced : 13
A processed : 13
P produced : 14
A processed : 14
P produced : 15
A processed : 15
P produced : 16
A processed : 16
P produced : 17
A processed : 17
P produced : 18
A processed : 18
P produced : 19
A processed : 19
A processed : 12
A processed : 11
A processed : 4
A processed : 3
A processed : 2

分析:這鎖好像沒什么用[ A processed : 7]還沒有生產(chǎn)出來就消費(fèi)了,
也試過:List list = Collections.synchronizedList(new LinkedList(...));
也有出現(xiàn)還沒有生產(chǎn)出來就消費(fèi)了....

樓主的程序哪個(gè)
private int value; //共享?量
private boolean isEmpty = true; //value是否?空的信?量
看意思是哪樣,一般不會(huì)這樣用的......
道理很簡(jiǎn)單:生產(chǎn)出來個(gè)的商品不可能只放在一個(gè)變量里,應(yīng)該是集合



查看完整回答
反對(duì) 回復(fù) 2022-05-30
  • 1 回答
  • 0 關(guān)注
  • 68 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)