多线程问题:计算任务,一个包含了2千个整数的数组,分拆了多个线程来进行并行计算,最后汇总出计算的结果。

/**
 *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

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值