/*编写10个线程, 第一个线程从1加到10, 第二个线程从11加到20, ...,
第十个线程从91加到100, 最后再把10个线程的结果相加输出到控制台上
纪念基础班,纪念1ms的精髓.
*/
package Test;
public class Test04 {
public static void main(String[] args) throws Exception {
for(int i=0;i<10;i++){
SumThread s1=new SumThread();
//setName()方法继承自Thread类
s1.setName("第"+(i+1)+"条线程");
//setNum()方法在类里已经定义,传入的int参数依次是run()方法里面for循环的初始值:1,11,21,31...91
s1.setNum(i*10+1);
s1.start();
/*精髓所在,这个for循环是主线程,主线程睡1ms,足够让本次开启的线程执行完毕,
* 避免多个线程抢占CPU的执行权,而出现图二的运行结果.*/
Thread.sleep(1);
}
}
}
class SumThread extends Thread{
//定义为静态,被每条线程所共享,统计10条线程求和结果的总和
private static int total;
private int num;
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
//复写run()方法
public void run(){
synchronized (SumThread.class) {
int sum=0;
for(int i=num;i<num+10;i++){
sum+=i;
}
total+=sum;
System.out.println(getName()+"的和为:"+sum);
//num==91表示此次开启的是第10条线程,其值为10条线程执行结果的总和
if(num==91){
System.out.println("总和为:"+total);
}
}
}
}
|
|