/**
*2. 计算任务,一个包含了2千个整数的数组,分拆了多个线程来进行并行计算,最后汇总出计算的结果。
* 思路:用实现runnable接口的方式来实现多线程同时完成任务,使用同步方法来解决多线程的临界资源问题
* 确保每次只有一个线程能够执行任务,声明的和为静态变量,实现共享属性,不过此方法可能比较耗内存
* @Author XZG
* @Date: 2020/10/31 9:05
* @Version 1.0
*/
public class Test1 {
public static void main(String[] args) {
//创建一个新的number对象
Number n1 = new Number();
for (int i = 1; i <= 10; i++) {
//在创建新的线程的同时取名并给他分配任务
Thread t1 = new Thread(n1,"计算机" + i);
//启动线程
t1.start();
}
}
}
``
```java
public class Number implements Runnable{
//声明一个长度为2000的数组
public static int[] arr = new int[2000];
//创建一个锁对象,这个对象必须是线程共享的
public Object ob = new Object();
//声明一个静态变量存计算的和,非静态不能共享,注意
public static int sum = 0;
//声明数组索引
public static int index = 0;
@Override
public void run() {
for (int i = 1; i < 2001; i++) {
arr[i-1] = i;
}
while (true){
synchronized (ob){
if (count()){
//如果返回值为true,结束运行while循环,如果是false,继续执行
break;
}
}
}
}
//声明相加方法,返回值为boolean类型,当index<2000,程序继续运行,如果不是,返回true
public synchronized boolean count(){
if (index < 2000){
//计算的和为sum加上arr[index]
sum = sum + arr[index];
//索引加1
index++;
System.out.println(Thread.currentThread().getName() + "正在加第" + index + "个数,和为" + sum);
return false;
}
else {
return true;
}
}
}
运行结果,从1加到2000