多线程以及线程池实例

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

public class ThreadPoolExecutorTest {    /**     * 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。     * 线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。     */    public static void cachedThreadPool() {        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();        for (int i = 0; i < 10; i++) {            final int index = i;            try {                Thread.sleep(index * 1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            cachedThreadPool.execute(new Runnable() {                public void run() {                    System.out.println(Thread.currentThread().getName()+"   : "+index);                }            });        }    }

/**     * 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。     * 因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。     * 定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()     */    public static void fixedThreadPool() {        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);        for (int i = 0; i < 10; i++) {            final int index = i;            fixedThreadPool.execute(new Runnable() {                public void run() {                    try {                        System.out.println(Thread.currentThread().getName()+"   : "+index);                        Thread.sleep(2000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            });        }    }

/**     * 创建一个定长线程池,支持定时及周期性任务执行。表示延迟3秒执行。     */    public static void scheduledThreadPool1() {        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);        scheduledThreadPool.schedule(new Runnable() {            public void run() {                System.out.println(Thread.currentThread().getName()+"     delay 3 seconds");            }        }, 3, TimeUnit.SECONDS);    }

/**     * 创建一个定长线程池,支持定时及周期性任务执行。表示延迟1秒后每3秒执行一次。     */    public static void scheduledThreadPool2() {        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);        scheduledThreadPool.scheduleAtFixedRate(new Runnable() {            public void run() {                System.out.println(Thread.currentThread().getName()+"     delay 1 seconds, and excute every 3 seconds");            }        }, 1, 3, TimeUnit.SECONDS);    }

/**     * 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。     */    public static void singleThreadExecutor() {        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();        for (int i = 0; i < 10; i++) {            final int index = i;            singleThreadExecutor.execute(new Runnable() {                public void run() {                    try {                        System.out.println(Thread.currentThread().getName()+"   : "+index);                        Thread.sleep(2000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            });        }    }

public static void main(String[] args){        ThreadPoolExecutorTest.scheduledThreadPool2();//        ThreadPoolExecutorTest.fixedThreadPool();    }

}  
时间: 2024-10-21 11:04:47

多线程以及线程池实例的相关文章

C#多线程之线程池篇3

在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关知识. 五.使用等待句柄和超时 在这一小节中,我们将学习如何在线程池中实现超时和正确地实现等待.具体操作步骤如下: 1.使用Visual Studio 2015创建一个新的控制台应用程序. 2.双击打开"Program.cs"文件,编写代码如下所示: 1 using System; 2 u

Android多线程操作——线程池管理综述

题记-- 难过了,悄悄走一走: 伤心了,默默睡一觉: 优雅不是训练出来的,而是一种阅历: 淡然不是伪装出来的,而是一种沉淀: 时间飞逝,老去的只是我们的容颜: 时间仿佛一颗灵魂,越来越动人: 1.简述: 在多线程的世界中,是那么的神奇 与 高效以及合理: 2.创建线程池实例 官方推荐使用Executors类工厂方法来创建线程池管理,Executors类是官方提供的一个工厂类,里面封装了好多功能不一样的线程池,从而使得我们创建线程池非常的简单:                    3.使用线程池

多线程及线程池学习心得

一.线程的应用与特点 多线程是程序员不可或缺的技术能力,多线程技术在各个方面都有应用,特别在性能优化上更是起到至关重要的作用.但是,如果多线程写得不好,往往会适得其反,特别是高并发时会造成阻塞.超时等现象.多线程具有以下特点:1.独立性,拥有自己独立的资源,拥有自己私有的地址空间:2.动态性,进程具有自己的生命周期和各种不同的状态:3.并发性,多个进程可以在单个处理器上并发执行,不会相互影响,并行是指同一时刻有多条指令在多个处理器上同时执行.线程是进程的组成部分,一个进程可以拥有多个线程,一个线

java线程池实例

目的         了解线程池的知识后,写个线程池实例,熟悉多线程开发,建议看jdk线程池源码,跟大师比,才知道差距啊O(∩_∩)O 线程池类 1 package thread.pool2; 2 3 import java.util.LinkedList; 4 5 public class ThreadPool { 6 //最大线程数 7 private int maxCapacity; 8 //初始线程数 9 private int initCapacity; 10 //当前线程数 11 p

C#多线程之线程池篇2

在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我们将学习对于大量的异步操作,使用线程池和分别使用单独的线程在性能上有什么差异性.具体操作步骤如下: 1.使用Visual Studio 2015创建一个新的控制台应用程序. 2.双击打开"Program.cs"文件,编写代码如下所示: 1 using System; 2 using Sys

Linux C++线程池实例

想做一个多线程服务器测试程序,因此参考了github的一些实例,然后自己动手写了类似来加深理解. 目前了解的线程池实现有2种思路: 第一种: 主进程创建一定数量的线程,并将其全部挂起,此时线程状态为idle,并将running态计数为0,等到任务可以执行了,就唤醒线程,此时线程状态为running,计数增加,如果计数达到最大线程数,就再创建一组空闲线程,等待新任务,上一组线程执行完退出,如此交替. 第二种: 采用生成者-消费者模式,主进程作为生成者,创建FIFO队列,在任务队列尾部添加任务,线程

C#多线程和线程池

1.概念  1.0 线程的和进程的关系以及优缺点 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,CLR(公共语言运行库)为该进程创建了一个线程,该线程称为主线程.例如当我们创建一个C#控制台程序,程序的入口是Main()函数,Main()函数是始于一个主线程的.它的功能主要 是产生新的线程和执行程序.C#是一门支持多线程的编程语言,通过Thread类创建子线程,引入using System.Th

java多线程、线程池的实现

Java实现多线程的3种方法:继承Thread类.实现runnable接口.使用ExecutorService,Callable.Future实现有返回值的多线程.前2种线程的实现方式没有返回值,第三种实现方式可以获取线程执行的返回值. 一:继承java.lang.Thread类 public class MyThread extends Thread { @Override public void run() { System.out.println( "my thread begin.&qu

Linux下简单的多线程编程--线程池的实现

/* 写在前面的话: 今天刚“开原”,选择了一篇关于线程池的文件与大家分享,希望能对您学习有所帮助,也希望能与大家共同学习! 选择在这个特殊的时候注册并发文章也是有一些我个人特殊的意义的,看我的id(西游小学生.45)就知道了,哈哈.在这里也很感谢博客园的员工,刚发申请两分钟就同意了. */ 最近由于要写一个类似于QQ的程序,所以想到要用到多线程.既然要用多线程,那何不写一个线程池?于是上网搜了搜多线程的代码,发现大多都不是很完善,或者有些小bug.所以,在这里贴出一个完整的,经过我多重测试的,