读书人

java 多线程 施行完成 退出 关闭

发布时间: 2013-08-10 21:14:06 作者: rapoo

java 多线程 执行完成 退出 关闭

本来多线程就不熟悉,每次做到这里 总会遇到这个问题,解决一次 忘一次, 这记下来

?

?

? private static int THREAD_NUM = 10; ?线程总数

? private AtomicInteger threadNum = new AtomicInteger(0); ? 每个线程执行完 了 记录一个标记

es.shutdown(); 这个只能让线程池退出,并不能让 主线程推出,所以这里要给一个 ?next ?标记,当线程池 关闭之后,告诉主线程, ?这是主线程 ?继续向下执行;

?

ExecutorService es = Executors.newFixedThreadPool(THREAD_NUM);

? ? for (int i = 0; i < THREAD_NUM; i++) {

? ? ? es.execute(new InitLangFangData(loopStr));

? ? }

? ? boolean next = true;// 主线程退出标记

? ? while (next) {

? ? ? if (THREAD_NUM == threadNum.get()) {

? ? ? ? es.shutdown(); ? //这里是让 ?线程池推出使用的 ,但是主线程并没有退出

? ? ? ? if (es.isShutdown()) {

? ? ? ? ? next = false;

? ? ? ? }

? ? ? } else {

? ? ? ? Thread.sleep(5000);

? ? ? }

? ? }

?

?

class InitLangFangData extends Thread

? {

? ? private String loopStr;

?

? ? public InitLangFangData(String loopStr)

? ? {

?

? ? ? this.loopStr = loopStr;

? ? }

?

? ? public void run()

? ? {

? ? ? try {

? ? ? ? initData(loopStr);

? ? ? } catch (DataCellException e) {

? ? ? ? logger.error(e.getMessage(), e);

? ? ? } catch (IOException e) {

? ? ? ? logger.error(e.getMessage(), e);

? ? ? }

? ? ? threadNum.getAndIncrement();

? ? }

? }

读书人网 >编程

热点推荐