📄 hzh.txt
字号:
package thread.control;
import java.util.ArrayList;
import java.util.Random;
public class DataMain {
public static void main(String[] args) {
final int TIMES=4;
final int M=3,N=5;
DataSender s1,s2;
DataReciever r=new DataReciever();
s1=new DataSender(r,M,M*TIMES);
s2=new DataSender(r,N,N*TIMES);
r.start();
s1.start();
s2.start();
}
}
class DataReciever extends Thread{
ArrayList datalist=new ArrayList();
final int MAX=10;
int datanum[]=new int[MAX];
int datalength[]=new int[MAX];
int datacount[]=new int[MAX];
int average[]=new int[MAX];
int senderId;
int size;
int total;
volatile int count;
public DataReciever(){
}
public int connect(int datasize,int maxlength){
datanum[senderId]=datasize;
datalength[senderId]=maxlength;
total+=maxlength;
size+=datasize;
int data[]=new int[datasize];
datalist.add(data);
return senderId++;
}
public void run(){
int printcount=0;
int tempcount;
while(true){
tempcount=count;
if ((tempcount%size==0)&& (tempcount>0)) {
if (printcount!=tempcount){//if (state) {
//System.out.print("\ncount=" + count);
//System.out.print("\nsize=" + size);
printcount=tempcount;
printResult();
resetSenders();
//state = false;
}
}
if (tempcount>=total) break;
}
}
public boolean setData(int id,int data){
if (datacount[id]==datanum[id])return false;
addData(id,data);
return true;
}
private void addData(int id,int data){
int temp[]=(int[])datalist.get(id);
temp[datacount[id]]=data;
datacount[id]++;
count++;
}
private void printResult(){
for (int i=0;i<senderId;i++){
int data[]=(int [])datalist.get(i);
System.out.println("\n\n Data form sender "+i+" : ");
for (int j=0;j<datanum[i];j++)
{ System.out.print(data[j]+" ");
average[i]+=data[j];
}
average[i]/=datanum[i];
System.out.println("\n Average : "+average[i]);
}
}
private void resetSenders(){
for (int i=0;i<senderId;i++){
datacount[i]=0;
}
}
}
class DataSender extends Thread{
DataReciever dr;
int id;
int datasize;
int maxlength;
int count;
public DataSender(DataReciever dr,int datasize,int maxlength) {
this.dr=dr;
this.datasize=datasize;
this.maxlength=maxlength;
id=dr.connect(datasize,maxlength);
}
public void run() {
while (count < maxlength) {
int data = 0xFF&generateData();
while (!dr.setData(id, data))
Thread.yield();
System.out.print(""+id+".<"+data+">.");
count++;
}
}
private int generateData() {
Random r=new java.util.Random();
return r.nextInt();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -