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()); } }