`
flychao88
  • 浏览: 751882 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程池在任何场景下都比顺序执行快吗??

 
阅读更多

有时候并不是在任何场景下使用线程池,效率都比顺序执行程序快,请看下面例子程序:

 

这是使用线程池程序。

 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE,
                KEEP_ALIVE_TIME, TimeUnit.SECONDS, nocardTaskQueue);
        threadPool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

        long threadStartTime = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            Future future = threadPool.submit(new TestRunnable());
            try {
                future.get(1000, TimeUnit.SECONDS);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        long threadEndTime = System.currentTimeMillis();
        System.out.println("采用线程池处理:" + (threadEndTime - threadStartTime));

 

这是顺序执行程序:

 long objectStartTime = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            TestRunnable tt = new TestRunnable();
            tt.run();
        }
        long objectEndTime = System.currentTimeMillis();
        System.out.println("采用普通类处理:" + (objectEndTime - objectStartTime));

 

 

执行结果是:

  • 大小: 17.8 KB
分享到:
评论
2 楼 flychao88 2015-07-03  
kensou97 写道
线程池节省的是频繁创建和销毁线程带来的开销吧...我不觉得这个例子有任何参考价值...


在实际工作中,很多人用线程池提高程序的并行度,其实就是提升处理速度,有时候不能够合理使用,就会产生速度并不如顺序执行好,你说的这些话也没问题,我这个例子只是强调合理这个词,有没有参考价值,这个不同的人有不同的理解吧
1 楼 kensou97 2015-07-02  
线程池节省的是频繁创建和销毁线程带来的开销吧...我不觉得这个例子有任何参考价值...

相关推荐

    线程池&&队列各类区别使用场景

    线程池和队列在IT领域中是两个非常重要的概念,尤其在多线程编程和并发处理中扮演着核心角色。它们各自有独特的特性和适用场景,理解它们的区别和使用场景对于优化系统性能至关重要。 首先,让我们从线程池开始。...

    多线程写法(精易模块线程池和鱼刺模块线程池)

    线程池是一种管理线程的机制,它预先创建一定数量的线程,当有任务需要执行时,线程池会分配一个空闲的线程去执行任务,而不是每次都创建新的线程。这种设计可以避免频繁创建和销毁线程带来的开销,提高系统的响应...

    Java线程池使用说明

    在JDK 1.5版本之前,Java对线程池的支持非常有限,而在JDK 1.5之后,加入了java.util.concurrent包,其中包含了一系列关于线程池的接口和类,极大地丰富了线程池的应用场景和管理方式。 线程池的主要作用是限制系统...

    四大线程池的用法实例

    在Java编程中,线程池是一种管理线程的机制,它可以有效地控制运行的线程数量,避免因大量创建和销毁线程带来...通过分析和运行这个示例,我们可以更直观地了解线程池在不同场景下的表现,从而更好地在实际项目中运用。

    JDK自带线程池分析

    此线程池保证所有任务的执行顺序按照任务的提交顺序执行。 计划线程池 计划线程池是指可以计划执行任务的线程池,例如在指定的时间执行任务。计划线程池可以使用 ScheduledThreadPoolExecutor 类来创建。 结论 ...

    Java中的线程与线程池.pptx

    2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,保证了任务的执行顺序。 3. newFixedThreadPool:创建一个固定大小的线程池,线程数量保持不变,任务排队等待执行。 4. ...

    Django异步任务线程池实现原理

    在Django中,可以通过配置文件对线程池的参数进行设置,例如设置线程池中线程的数量等,来满足不同业务场景的需求。 通过以上知识点的详细介绍和实际代码示例,文章帮助开发者深入理解Django中异步任务线程池的实现...

    Java 线程池.docx

    3. **SingleThreadPool**:仅包含一个线程的线程池,所有任务都在同一线程中顺序执行,适合执行单一任务或互斥任务。 4. **FixedThreadPool**:固定大小的线程池,核心线程数与最大线程数相等,任务队列无限制或有...

    Android中的线程池与任务队列

    1. `SingleThreadExecutor`:只有一个工作线程,确保任务按顺序执行,适合用于需要保持顺序的场景。 2. `FixedThreadPool`:固定大小的线程池,当线程因异常结束时,会有一个新的线程补充。 3. `CachedThreadPool`:...

    线程池管理源码 java 源码

    1. **单线程池**:保证所有任务都在同一线程中顺序执行,适合需要保持任务执行顺序的场景。 2. **定长线程池**:核心线程数与最大线程数相等,不会动态调整,适合处理长期运行的任务。 3. **缓存线程池**:没有核心...

    java 四种线程池实例

    这个线程池适用于需要保证执行顺序的场景,比如日志记录或者数据库事务。 4. **ScheduledThreadPool**: `Executors.newScheduledThreadPool(int corePoolSize)`创建一个支持定时及周期性任务执行的线程池。它可以...

    java线程池的使用方式

    适用于需要保证任务顺序执行的场景,例如执行一系列后台任务。 - **newFixedThreadPool**:创建固定大小的线程池。适用于需要保持固定数量的线程处理任务的场景。 - **newCachedThreadPool**:创建一个可根据需要...

    SpringBoot线程池详解含完整示例(值得珍藏)

    1. SingleThreadExecutor:这个线程池仅使用一个线程来执行所有任务,确保任务按提交顺序执行,不会发生并发,适合于任务之间需要保持执行顺序的场景。 2. FixedThreadPool:固定容量的线程池,核心线程数等于最大...

    线程池的实现以及底层原理.docx

    2. SingleThreadExecutor:该类型的线程池只有一个线程,适用于执行顺序执行的任务。 3. CachedThreadPool:该类型的线程池可以根据实际情况调整线程数量,适用于执行大量任务。 四、线程池的创建方式 Java中有...

    C++ 线程池源码+demo _android源码分析

    它们通常会模拟各种工作负载,如顺序提交任务、批量提交任务、并发提交任务等,以确保线程池在各种情况下都能正常工作。 总的来说,这个资源为学习和实践C++线程池提供了丰富的素材,无论是对C++的旧版本还是新版本...

    Java几种线程池类型介绍及使用.docx

    创建一个只有一个线程的线程池,所有任务都在同一个线程中顺序执行,保证了执行的顺序性,但无法并发执行任务。 4. **`newScheduledThreadPool`**: 创建一个可以定时或定期执行任务的线程池,可以用于延迟执行或...

    android线程池

    它保证所有任务都在同一个线程中顺序执行,确保了任务执行的顺序性和互斥性。适合于需要按顺序处理任务或保持数据一致性的情况。 四、缓存线程池(CachedThreadPool) CachedThreadPool由Executors的...

    LINUX_c++线程池

    ### LINUX_c++线程池详解 #### 一、线程池的重要性及背景 ...本文介绍的LINUX_c++线程池框架提供了高度灵活且易于扩展的基础架构,适用于各种应用场景,尤其是那些对性能和资源利用率要求较高的网络服务场景。

    【多线程高并发编程】四 java(jdk1.8)五种线程池,你都知道具体的应用场景吗?

    所有任务都在同一个线程中顺序执行,保证了任务的顺序性和互斥性。 - **newCachedThreadPool()**:创建一个可缓存线程池。如果线程池中的线程在60秒内没有执行任何任务,该线程会被终止并从池中移除。当需要执行新...

    socket编程 使用select与线程池

    在TCP中,数据被分割成小的数据段,并且每个数据段都带有序列号和确认机制,确保数据能够按顺序完整地到达目的地;而在UDP中,数据以独立的数据包发送,没有确认或重传机制,适合于对实时性要求较高的场景。 在创建...

Global site tag (gtag.js) - Google Analytics