[問(wèn)答題] 在程序中,DataPool是一個(gè)數(shù)據(jù)池,能存放一個(gè)血型數(shù)據(jù),線(xiàn)程a和線(xiàn)程b負(fù)責(zé)向其中存放數(shù)據(jù),一次只能有一個(gè)線(xiàn)程向其中存放數(shù)據(jù),數(shù)據(jù)放入DataPo
[問(wèn)答題] 在程序中,DataPool是一個(gè)數(shù)據(jù)池,能存放一個(gè)血型數(shù)據(jù),線(xiàn)程a和線(xiàn)程b負(fù)責(zé)向其中存放數(shù)據(jù),一次只能有一個(gè)線(xiàn)程向其中存放數(shù)據(jù),數(shù)據(jù)放入DataPool以后,該線(xiàn)程隨機(jī)休眠一段時(shí)間,讓另外一個(gè)線(xiàn)程運(yùn)行,請(qǐng)將程序補(bǔ)充完整。
注意:請(qǐng)勿修改main()主方法和其他已有語(yǔ)句內(nèi)容,僅在橫線(xiàn)處填入適當(dāng)語(yǔ)句。
class PutData extends Thread
DataPool s;
int c;
String name;
public PutData(DataPool s,String name)
this.s=s;this.name=name;
public void run() for(int i=0;i<10000000;i++)
c=(int)(Math.random()*10);
s.setData(c);
System.out.println(name+":push"+c);
try
______((int) (Math.random()*1000));//休眠
catch(InterruptedException e)
class DataPool
private int data=0;
public ______void setData(int d)
data=d;public class simple
public static
正確答案:sleep synchronized
參考解析:[講解] 本題考查知識(shí)點(diǎn):線(xiàn)程的要領(lǐng)和使用、線(xiàn)程的同步和共享。解題思路:線(xiàn)程類(lèi)Thread提供了一系列控制線(xiàn)程的方法,讓線(xiàn)程休眠,就是其中的一種。本題中定義了PutData的兩個(gè)實(shí)例a和b。PutData的run方法中,利用一個(gè)循環(huán)向DataPool中存放10000000個(gè)隨機(jī)數(shù)據(jù),每存放一個(gè)數(shù)據(jù)以后休眠一段時(shí)間,讓其他線(xiàn)程運(yùn)行。第1個(gè)空,讓線(xiàn)程休眠使用的方法是 sleep()。該方法使線(xiàn)程暫停運(yùn)行一段時(shí)間,在這段時(shí)間內(nèi)線(xiàn)程不會(huì)搶占CPU資源,為其他線(xiàn)程的運(yùn)行提供了機(jī)會(huì)。本題的第2個(gè)空是考查線(xiàn)程的同步和互斥的問(wèn)題,當(dāng)線(xiàn)程A和線(xiàn)程B都調(diào)用setData方法改變data數(shù)值時(shí),在同一段時(shí)間內(nèi),只能允許一個(gè)線(xiàn)程進(jìn)行操作,這就需要兩個(gè)線(xiàn)程之間互斥訪(fǎng)問(wèn)setData()方法。synchronized允許線(xiàn)程獨(dú)占地存取對(duì)象,當(dāng) synchronized聲明的程序塊已經(jīng)被一個(gè)線(xiàn)程占用,其他線(xiàn)程就必須等待該線(xiàn)程放棄這個(gè)程序塊的控制權(quán)以后才能對(duì)其進(jìn)行訪(fǎng)問(wèn)。因此,第2個(gè)空需要填寫(xiě)synchronized。
詞條內(nèi)容僅供參考,如果您需要解決具體問(wèn)題
(尤其在法律、醫(yī)學(xué)等領(lǐng)域),建議您咨詢(xún)相關(guān)領(lǐng)域?qū)I(yè)人士。