51信用卡多线程编程题,处理200000字符串包含指定元素问题

来源:互联网 发布:真空助勃器 知乎 编辑:程序博客网 时间:2024/06/16 14:37

1、问题描述:

输入200000行字符串,用3个线程找出其中包含u51的字符串个数。

2、解题思路:

用Runnable实现多线程,将输入值放入集合,线程请求集合锁,申请成功后进行remove操作避免重复计算。

3、代码实现:

package cn.xaut.xinyongka;import java.util.LinkedList;import java.util.Scanner;import java.util.concurrent.atomic.AtomicInteger;public class Main2 {static AtomicInteger count = new AtomicInteger(0);public static void main(String[] args) {        Scanner in = new Scanner(System.in);        LinkedList<String> ioc = new LinkedList<>();                while(in.hasNext()){        ioc.add(in.nextLine());        }        Thread t1 =new Thread(new Check(ioc));Thread t2 =new Thread(new Check(ioc));Thread t3 =new Thread(new Check(ioc));t1.start();t2.start();t3.start();        try {t1.join();t2.join();t3.join();} catch (InterruptedException e) {e.printStackTrace();}        System.out.println(count);    }}class Check implements Runnable {LinkedList<String> ioc;public Check (LinkedList<String> ioc) {this.ioc = ioc;}@Overridepublic void run () {while (!ioc.isEmpty()) {synchronized (ioc) {if (!ioc.isEmpty()) {String str = ioc.removeFirst();if (str.contains("u51")) {Main2.count.getAndIncrement();}}}}}}