java线程池的学习

package advancedJava;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
* java 线程池学习
* @author: cuiH
* Date: 13-12-7
public class ThreadPoolTest {
* 线程池的概念
* jdk5提出了ThreadPool的概念
* 之所以采用线程池的主要原因在于:
* 线程时间=T1(创建时间)+T2(运行时间)+T3(销毁时间)
* 线程池则可以一个线程空闲下来后为另一个服务,这样子,就达到了整体的效果,
* 嘿嘿(敏捷团队的每一个人一样)
* 四种种静态工厂线程池
* 固定线程池
* 缓存线程池
* 单一线程池 (采用替补的方式)
* 另外,还有定时器的线程池 (使用可以参考Timer的使用)
public static void main(String[] args) {
* 测试实例说明
* 有100个任务,一次提交给线程池10个,分析线程池,每次的处理情况
//固定的线程池
// ExecutorService threadPool = Executors.newFixedThreadPool(3); //Executor是一个工具类,声明了一个具有三个线程的线程池
//缓存的线程池 ,根据任务量自动增加线程数量,和回收 ,就会自动增加到十个线程
// ExecutorService threadPool = Executors.newCachedThreadPool();
//线程池中只有一个线程,但是线程死了后可以对另一个线程调用重新启动,(单线程池)
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for (int i = 0;i<10;i++){
final int finalI = i;
threadPool.execute(new Runnable() { //任务执行
@Override
public void run() {
for(int j = 0;j<10;j++){
try {
Thread.sleep(20); //便于输出观看
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" loop of " + finalI +
" for task of "+ j); //某个线程正在进行第几次循环
System.out.println("all of 10 tasks have committed");
// threadPool.shutdown();
//采用定时任务,定时器任务类型
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {
@Override  http://www.huiyi8.com/jiaoben/
public void run() { 网页特效代码
System.out.println("bombing");
},5,2, TimeUnit.SECONDS); //5秒之后炸,每个2秒炸一下 ,schedule(定时任务)或者schedule之后定时,最后一个是单位
/**分析
* 真正的线程接口是ExecutorService,而Executor是一个顶级的接口。
* 线程池的编程模式下,任务是提交给整个池子,由池子来负责分配任务;相当于,先接手(接受任务防止长时间的等待),接手后进行细节分配。
* 任务是提交给线程池的,但是一个线程只能执行一个任务,但是可以同时向线程池提交多个任务。
* 但是对于高端的使用,需要自己定制线程池

java线程池的学习

时间: 2024-10-20 21:37:26

java线程池的学习的相关文章

【Java线程池快速学习教程】

1. Java线程池 线程池:顾名思义,用一个池子装载多个线程,使用池子去管理多个线程. 问题来源:应用大量通过new Thread()方法创建执行时间短的线程,较大的消耗系统资源并且系统的响应速度变慢.[在一个什么程度上能够判断启用线程池对系统的资源消耗比启动定量的new Thread()资源消耗低?这个怎么测试?][用户体验卡顿?慢?观察CPU百分比?] 解决办法:使用线程池管理短时间执行完毕的大量线程,通过重用已存在的线程,降低线程创建和销毁造成的消耗,提高系统响应速度. 2. Java线

Java线程池详解(二)

一.前言 在总结了线程池的一些原理及实现细节之后,产出了一篇文章:Java线程池详解(一),后面的(一)是在本文出现之后加上的,而本文就成了(二).因为在写完第一篇关于java线程池的文章之后,越发觉得还有太多内容需要补充,每次都是修修补补,总觉得还缺点什么.在第一篇中,我着重描述了java线程池的原理以及它的实现,主要的点在于它是如何工作的.而本文的内容将更为上层,重点在于如何应用java线程池,算是对第一篇文章的一点补充,这样对于java线程池的学习和总结稍微完整一些. 使用过java线程池

Java 线程池学习

Reference: <创建Java线程池>[1],<Java线程:新特征-线程池>[2], <Java线程池学习>[3],<线程池ThreadPoolExecutor使用简介>[4],<Java5中的线程池实例讲解>[5],<ThreadPoolExecutor使用和思考>[6] [1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池. [2]中介绍

Java深入学习13:Java线程池

Java深入学习13:Java线程池 一.线程池的作用 线程池提供一个线程队列,队列中保存着所有等待状态的线程.避免了创建与销毁等额外开销,提交了响应的速度. 二.类关系 Java线程池相关的接口和类均在 java.util.concurrent 包下,其相关关系(部分)如下 三.Executors类以及相关常用方法介绍 1-Executors类简介:简单的说是线程方法的工具类,提供了 创建线程池等方法. 2-ExecutorService 类创建线程池 //创建缓存线程池,线程数量不固定,可以

Java四种线程池的学习与总结

在Java开发中,有时遇到多线程的开发时,直接使用Thread操作,对程序的性能和维护上都是一个问题,使用Java提供的线程池来操作可以很好的解决问题. 一.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable(){ @Override public void run(){ //TODO Auto-generatedmethod stub } } ).start(); 那你就out太多了,new Thread的弊端如下:

Java线程池学习

一.实现Java多线程的方法 1.继承Thread类创建多线程 Thread类本质实现了Runnable接口.启动线程为start0()方法.是个native方法. 1 public class ThreadProcess extends Thread { 2 3 @Override 4 public void run(){ 5 long lastTime = System.currentTimeMillis(); 6 for(int i = 0; i < 1; i++){ 7 int ele

深入学习Java线程池

在前面的例子中,我们都是通过new Thread来创建一个线程,由于线程的创建和销毁都需要消耗一定的CPU资源,所以在高并发下这种创建线程的方式将严重影响代码执行效率.而线程池的作用就是让一个线程执行结束后不马上销毁,继续执行新的任务,这样就节省了不断创建线程和销毁线程的开销. ThreadPoolExecutor 创建Java线程池最为核心的类为ThreadPoolExecutor: 它提供了四种构造函数来创建线程池,其中最为核心的构造函数如下所示: 1234567 public Thread

Java 线程池的原理与实现

最近在学习线程池.内存控制等关于提高程序运行性能方面的编程技术,在网上看到有一哥们写得不错,故和大家一起分享. [分享]Java 线程池的原理与实现 这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧.线程池就是其中之一,一提到线程,我们会想到以前<操作系统>的生产者与消费者,信号量,同步控制等等.一提到池,我们会想到数据库连接池,但是线程池又如何呢? 建议:在阅读本文前,先理一理同步的知识,特别是syncronized同步关键字的用

JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .

从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.以下是我的学习过程. 首先是构造函数签名如下: [java] view plain copy print ? public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<