用15个线程实现,求123456789 之间放+-和100的表达式(11结果),如果一个线程求出结果,立即告诉其它停止。

  public class T00 {
     volatile List<String> list = new ArrayList<>();
     void op() {
         System.out.printf("%s 启动计算中 %n",
                 Thread.currentThread().getName());

         String[] o = new String[]{"", "+", "-"};
         Random rand = new Random();
         StringBuffer str = new StringBuffer("1");
         Pattern p = Pattern.compile("(\\d+|-\\d+)");
         while (list.size()!=11) {
             for (int i = 2; i < 10; i++)
                 str.append(String.format("%s%d",
                         o[rand.nextInt(o.length)], i));
             String s = str.toString();
             Matcher m = p.matcher(s);
             List<Integer> ln = new ArrayList<>();
             while (m.find()) {
                 ln.add(Integer.parseInt(m.group()));
             }
             int sum = ln.stream().reduce(0, Integer::sum);
             if (sum == 100 && !list.contains(s)) {
                 list.add(s);
                 System.out.printf("[%s]:%s = 100%n",
                         Thread.currentThread().getName(), s);
             } else {
                 str.delete(1, str.length());
             }
         }

         System.out.printf("%s 结束 %n",
                 Thread.currentThread().getName());
     }
     public static void main(String[] args) {
         var t = new T00();
         for (int i = 0; i < 15; i++)
             new Thread(t::op, "T" + i).start();
     }
 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值