class Test{
/*定义数组:
*1.成员整型数组array,容量300
*2.将array初始化方法封装在构造函数中
*3.对100个数求和的方法封装成arrayAdd,参数为数组array和N(创建进程时用)
*/
class Array{
int[]array=new int[300];
Array(){
this.creatArray();
}
private void creatArray(){
for(int i=0;i<300;i++){
array[i]=i;
}
}
public int arrayAdd(int[] array,int N){
int sum=0;
this.array=array;
for(int i=N;i<N+100;i++){
sum+=array[i];
}
return sum;
}
}
/*进程类型
*引入数组指针a
*引入计数段点N
*在重写的方法run()中,调用Array中的累加方法
*注意:this必须写(刚开始我就没写,结果出现空指针错误)
*/
class Cal implements Runnable{
Array a;
int N;
Cal(Array a,int N){
this.a=a;
this.N=N;
}
public void run(){
System.out.println(a.arrayAdd(a.array, N));
}
}
/*主方法/线程main
*实例化数组类、线程类
*令N分别为0,100,300
*/
public static void main(String[] args) {
Array a=new Array();
Cal c1=new Cal(a,0);
Cal c2=new Cal(a,100);
Cal c3=new Cal(a,200);
new Thread(c1).start();
new Thread(c2).start();
new Thread(c3).start();
}
}
第一次输出:
14950
4950
24950
第二次输出:
4950
14950
24950
结果分析:三个线程不是顺序运行的,由CPU随机分配执行。