JAVA關於執行緒作業撰寫?

2016-06-16 10:07 pm
要求兩個執行緒透過ArrayBlockingQueue類別的物件,共用一個正整數變數,其初始值為30,
(I)第一個執行緒持續執行以下要求:
先sleep200毫秒,以隨機的方式,將共用變數減去一個介於2到10間的某個正整偶數值後,列印該變數。
(II)第二個執行緒持續執行以下要求:
先sleep200毫秒,以隨機的方式,將共用變數減去一個介於3到15間的某個3的倍數整數值後,列印該變數。

在這兩個執行緒中,此共用變數值小於0就結束。

回答 (1)

2016-06-20 4:21 am
是這樣嗎?

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
class var{
static BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(1);
}
public class yahoo_Q{
public static void main(String[] args){
try{
var.queue.put(30);
}
catch (InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
myThread T1=new myThread("T1",200,0);
myThread T2=new myThread("T2",200,1);
T1.start();
T2.start();
}
}
//執行緒
class myThread extends Thread{
public String name;
public int tyTime=0;
public int Type;
public int []num1={2,4,6,8,10};
public int []num2={3,6,9,12,15};
int index,temp,ans;
public myThread(String s,int t,int type) {
name=s;
tyTime=t;
Type=type;
ans=0;
}
public void run(){
while(ans>=0){
try{
sleep(tyTime);
index=(int)(Math.random()*5);
if(Type==0) {
temp=num1[index];
}
else if(Type==1) {
temp=num2[index];
}
ans=var.queue.take();
if(ans>=0) {
ans-=temp;
System.out.println(name+":"+(temp+ans)+"-"+temp+"="+ans);
}
var.queue.put(ans);
if(ans<0) break;

}
catch (InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(name+" final:"+ans);
}
}


收錄日期: 2021-05-04 02:13:58
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20160616140738AAotwfZ

檢視 Wayback Machine 備份