51信用的编程题有意思,要写多线程
RT,还是第一次在线笔试写多线程的代码,不知道牛客是怎么判题的
edit 2017-9-18 21:04:30
我乱写的多线程,不知道会不会有并发问题,反正AC了
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicInteger;
class TASK extends Thread {
private static int maxn = 0;
private static AtomicInteger idx = new AtomicInteger(0);
private static AtomicInteger count = new AtomicInteger(0);
private static String[] strs = new String[maxn];
TASK() {}
TASK(String[] strs, int n) {
this.strs = strs;
this.maxn = n;
}
@ Override
public void run() {
super.run();
String str;
while ((str = getString()) != null) {
if (str.contains("u51")) {
addCount();
}
}
}
public String getString() {
int idxx = idx.getAndIncrement();
if (idxx < maxn) {
return strs[idxx];
} else {
return null;
}
}
public void addCount() {
count.incrementAndGet();
}
public int getRes() {
return count.get();
}
}
public class Main {
public static void main(String[] args) {
String[] strs = new String[200000];
Scanner scanner = new Scanner(System.in);
int cnt = 0;
while (scanner.hasNextLine()) {
strs[cnt++] = scanner.nextLine();
}
TASK T1 = new TASK(strs, cnt);
TASK T2 = new TASK();
TASK T3 = new TASK();
T1.start();
T2.start();
T3.start();
try {
T1.join();
T2.join();
T3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(T1.getRes());
}
}