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;
}
@Override
public void run () {
while (!ioc.isEmpty()) {
synchronized (ioc) {
if (!ioc.isEmpty()) {
String str = ioc.removeFirst();
if (str.contains("u51")) {
Main2.count.getAndIncrement();
}
}
}
}
}
}