`
coach
  • 浏览: 382816 次
  • 性别: Icon_minigender_2
  • 来自: 印度
社区版块
存档分类
最新评论

线程池shutdown

阅读更多
写一个程序要求主线程等待子线程运行结束后退出,且子线程同时运行。

思路共享一个计数标志位,每个线程结束后都去更新这个计数标志位,主线程判断该计数标志位是否所有的线程都已经工作完成,但是为了不去浪费过多的CPU,主线程需要进行Thread.sleep(),但是Thread.sleep()也会倒是效率的下降,所以这样的方法并不完美。

查资料,发现java.util.concurrent包中有个名为Executors的类,可以创建线程池,于是仔细研究了一下,发现使用这个类构造一个线程池,可以很简单的解决这个问题。

package base;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main
{
	private static final int NTHREDS = 10;

	public static void main(String[] args)
	{
		ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);
		for (int i = 0; i < NTHREDS; i++)
		{
			Runnable worker = new MyRunnable();
			executor.execute(worker);
		}
		executor.shutdown();
		while (!executor.isTerminated())
		{
		}
		System.out.println("Finished all threads");
	}

}


package base;

public class MyRunnable implements Runnable
{
	public void run()
	{
		System.out.println(Thread.currentThread().getName());
	}
}




通过不断运行ExecutorService.isTerminated()方法检测全部的线程是否都已经运行结束,ExecutorService.shutdown()将使之前通过Executor.execute()提交的任务运行结束后关闭线程池。ExecutorService还提供了一个与ExecutorService.shutdown()对应的方法名为ExecutorService.shutdownNow()该方法试图将结束已经提交的任务并结束线程池(只有调用了interrupt才起作用,亦即任务体run的代码中有sleep())。



分享到:
评论
2 楼 觞S伤 2014-03-31  
牛人呀·  谢了··
1 楼 gangbener 2011-12-16  
很有用!谢谢牛人~~。^_^

相关推荐

    线程池核心组件源码剖析.docx

    该组件中,Executor 和 ExecutorService 接口 定义了线程池最核心的几个方法,提交任务 submit ()、关闭线程池 shutdown()。抽象类 AbstractExecutorService 主要对公共行为 submit()系列方法进行了实现,这些 ...

    java线程池概念.txt

    当线程池处于SHUTDOWN或STOP状态,并且所有工作线程已经销毁,任务缓存队列已经清空或执行结束后,线程池被设置为TERMINATED状态 b:参数再次说明。这是摘自网络的解释,我觉得他比喻的很好,所以这里直接就用它的...

    使用Java匿名内部类实现一个简单的线程池.txt

    最后通过调用线程池的shutdown()方法关闭线程池,不再接受新的任务,已经提交的任务将继续执行。这个简单的示例代码展示了如何使用Java匿名内部类来实现一个线程池的简单功能,方便了对多线程任务的管理和执行。

    linuxC语言线程池实现CP命令

    bool shutdown;//停始状态 }thread_pool; //初始化线程池 bool init_pool(thread_pool *pool, unsigned int threads_number); //新增任务 bool add_task(thread_pool *pool, void *(*task)(void *arg), void *...

    线程池的源代码

    int shutdown; /*线程池销毁标记*/ int max_thr_num; /*最大线程数*/ pthread_t *thr_id; //线程id数组 tpool_work_st *queue_head; //线程池队列头 pthread_mutex_t queue_lock; //线程池锁 ...

    c++11线程池,多线程安全,操作简单

    void example() { // 创建3个线程的线程池 ThreadPool pool(3); // 初始化线程池 pool.init(); // 提交乘法操作,总共30个 for (int i = 1;... auto future1 = pool.submit(multiply_output, std::...pool.shutdown(); }

    深入理解Java线程池:ThreadPoolExecutor _ Idea Buffer1

    1. RUNNING :能接受新提交的任务,并且也能处理阻塞队列中的任务 2. SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保

    PoolExecutor:线程池执行器的包装器

    线程池执行器的包装器。 示例初始化代码: IThreadPool executor = new ThreadPool (config . properties); executor . start(); // ... // Execute something. // executor.execute(runnable); // ... // Send ...

    线程池用法

    按先后顺序执行线程 public static void main(String[] args) { ExecutorService t = Executors.newSingleThreadExecutor(); for (int i = 0; i ; i++) { t.submit(new AA(i));... t.shutdown(); }

    完全解析Android多线程中线程池ThreadPool的原理和使用

    但是,大家了解线程池吗?今天,我将带大家全部学习关于线程池的所有知识。 目录 1. 简介 2. 工作原理 2.1 核心参数线程池中有6个核心参数,具体如下 上述6个参数的配置 决定了 线程池的功能,具体设置时机 = ...

    线程池ThreadPoolExecutor

    引子 线程的创建和销毁比较消耗资源,所以有一种更加高效快捷的方式管理线程—-线程池。 先来看一下线程池的java...void shutdown() :关闭线程池 AbstractExecutorService:基本实现了ExecutorService的所有方法 Th

    Java线程池介绍

    根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年会翻一倍。但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长。处理器制造商花了很多年来提高...线程池可以帮助程序员更好地利用多核 C

    Java线程池框架核心代码分析

    前言  多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过Executor接口,提供了一种标准的方法...  SHUTDOWN:不接收新任务

    12行代码,使用Java的并发和多线程技术实现简单的任务调度器

    实现了一个简单的任务调度器,可以...在任务执行完毕后,可以使用`shutdown()`方法关闭线程池。 这个功能还可以通过扩展来实现更高级的功能,例如支持多个任务调度器实例、支持动态调整线程池大小、支持任务优先级等。

    第7章-JUC多线程v1.1.pdf

    ThreadPoolExecutor还有两个常用的方法shutdown和submit,两者都用来关闭线程池, 但是submit有一个结果返回. 线程池任务执行 当执行executor(Runnable command)方法后, 传入一个任务, public void execute...

    高并发之——通过源码深度解析ThreadPoolExecutor类是如何保证线程池正确运行的

    对于线程池的核心类ThreadPoolExecutor来说,有哪些重要的属性和内部类为线程池的正确运行提供重要的保障呢? ThreadPoolExecutor类中的重要属性 在ThreadPoolExecutor类中,存在几个非常重要的属性和方法,接下来,...

    Tomcat 配置与优化方案详解

    Service.xml Server.xml配置文件用于对整个容器进行相关的配置。 元素: 是整个配置文件的根元素。表示整个Catalina容器。 属性: ... className:实现了org.apache.catalina...Serverport=”8005” shutdown=”SHUTDOWN

    多线程Socket通信简单实例(时间仓促,好多异常没捕获,见谅)

    采用MAP实现的简单线程池。客户端端指令: 登录指令:login 服务端指令: 查看当前在线用户: showusers 发送消息给指定用户:call 用户名 消息 或call all 消息 发送消息给所有在线用户 让指定的用户下线:shutdown ...

    IOCP原理及关键问题集(史上最全的IOCP资料大全).rar

    线程池,Socket连接池、数据库连接池、内存池及内存管理 防DDos攻击、防只连接不发送消息及Setsockopt相关设置 WSAENOBUFS及0缓冲的WSARecive投递 优雅的链接关闭方法及shutdown、TIME_WAIT 及注册表设置:...

    IOCP常见问题集(史上最全的IOCP资料大全)

    线程池,Socket连接池、数据库连接池、内存池及内存管理 防DDos攻击、防只连接不发送消息及Setsockopt相关设置 WSAENOBUFS及0缓冲的WSARecive投递 优雅的链接关闭方法及shutdown、TIME_WAIT 及注册表设置:...

Global site tag (gtag.js) - Google Analytics