Java练习题——入参为一个整型数组(Integer[] input),要求对入参(input)按奇偶数分成两个数组,要求启动两个线程,分别将入参(input)中的奇数和偶数输出到一个文件中,需要偶数

练习题:

        入参为一个整型数组(Integer[] input),要求对入参(input)按奇偶数分成两个数组,要求启动两个线程,分别将入参(input)中的奇数和偶数输出到一个文件中,需要偶数线程每打印10个偶数以后,就将奇数线程打印10个奇数,如此交替进行。同时需要记录输出进度,每完成1000个数就在控制台中打印当前完成数量,并在所有线程结束后,在控制台打印“Done” 。


结果演示:

当前偶数线程任务完成数量:1000
当前奇数线程任务完成数量:1000
当前偶数线程任务完成数量:2000
当前奇数线程任务完成数量:2000
当前偶数线程任务完成数量:3000
当前奇数线程任务完成数量:3000
当前偶数线程任务完成数量:4000
当前奇数线程任务完成数量:4000
Done

 <<<  请您给予关注增加动力  >>>


解题代码:

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Random;

public class Demo {
    public static void main(String[] args) {
        Random random = new Random(10000);
        Integer[] arr = new Integer[10000];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=Math.abs(random.nextInt());
        }
        excute(arr);
        System.out.println("Done");
    }
    public static void excute(Integer[] arr){
        //奇偶分离
        ArrayList<Integer> odd = new ArrayList<>();
        ArrayList<Integer> even = new ArrayList<>();
        String str="abc";
        for(Integer i : arr){
            if(i%2==0) {
                even.add(i);
            }else{
                odd.add(i);
            }
        }
        //奇偶线程处理
        new Thread("even"){
            @Override
            public void run() {
                try {
                    DataOutputStream fs =  new DataOutputStream(new FileOutputStream("d:/even.txt"));
                    int count = 0;
                    while (true){
                        synchronized (str){
                            str.notifyAll();
                            for (int i = count; i < even.size(); i++) {
                                fs.writeInt(even.get(i));
                                count++;
                                if (count%10==0){
                                    str.wait();
                                    break;
                                }
                            }
                            fs.flush();
                            if(count%1000==0){
                                System.out.println("当前偶数线程任务完成数量:"+count);
                            }
                            if(count>=even.size()){
                                break;
                            }
                        }
                    }
                    fs.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
        new Thread("odd"){
            @Override
            public void run() {
                try {
                    DataOutputStream fs =  new DataOutputStream(new FileOutputStream("d:/odd.txt"));
                    int count = 0;
                    while (true){
                        synchronized (str){
                            str.notifyAll();
                            for (int i = count; i < odd.size(); i++) {
                                fs.writeInt(odd.get(i));
                                count++;
                                if (count%10==0){
                                    str.wait();
                                    break;
                                }
                            }
                            fs.flush();
                            if(count%1000==0){
                                System.out.println("当前奇数线程任务完成数量:"+count);
                            }
                            if(count>=odd.size()){
                                break;
                            }
                        }
                    }
                    fs.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别晃我的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值