zoukankan      html  css  js  c++  java
  • Android(java)学习笔记14:Java线程池

    1. 线程池:

    1)程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。

    2)线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。

    3)在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池

    DK5新增了一个Executors工厂类来产生线程池,有如下几个方法

    public static ExecutorService newCachedThreadPool()

    public static ExecutorService newFixedThreadPool(int nThreads) //指定线程池中有多少个线程nThread

    public static ExecutorService newSingleThreadExecutor() //创建一个线程的线程池

    这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象 或者 Callable对象代表的线程。

    它提供了如下方法

    Future<?> submit(Runnable task) <T>

    Future<T> submit(Callable<T> task)

    2. 线程池案例代码:

     1 package cn.itcast_08;
     2 
     3 import java.util.concurrent.ExecutorService;
     4 import java.util.concurrent.Executors;
     5 
     6 /*
     7  * 线程池的好处:线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。
     8  * 
     9  * 如何实现线程的代码呢?
    10  *         A:创建一个线程池对象,控制要创建几个线程对象。
    11  *             public static ExecutorService newFixedThreadPool(int nThreads)
    12  *         B:这种线程池的线程可以执行:
    13  *             可以执行Runnable对象或者Callable对象代表的线程
    14  *             做一个类实现Runnable接口15  *         C:调用如下方法即可
    16  *             Future<?> submit(Runnable task)
    17  *            <T> Future<T> submit(Callable<T> task)
    18  *         D:我就要结束,可以吗?
    19  *            可以。
    20  */
    21 public class ExecutorsDemo {
    22     public static void main(String[] args) {
    23         // 创建一个线程池对象,控制要创建几个线程对象。
    24         // public static ExecutorService newFixedThreadPool(int nThreads)
    25         ExecutorService pool = Executors.newFixedThreadPool(2);
    26 
    27         // 可以执行Runnable对象或者Callable对象代表的线程
    28         pool.submit(new MyRunnable());
    29         pool.submit(new MyRunnable());
    30 
    31         //结束线程池
    32         pool.shutdown();
    33     }
    34 }

     

     1 package cn.itcast_08;
     2 
     3 public class MyRunnable implements Runnable {
     4 
     5     @Override
     6     public void run() {
     7         for (int x = 0; x < 100; x++) {
     8             System.out.println(Thread.currentThread().getName() + ":" + x);
     9         }
    10     }
    11 
    12 }

     

  • 相关阅读:
    斐波那契数列的递归和非递归实现
    二叉树遍历
    基础总结
    内部类
    I/O dempo
    读取文件注意事项
    eclipse 主题设置
    String 常用函数
    多态的理解
    ffmpeg处理RTMP流媒体的命令大全
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4510587.html
Copyright © 2011-2022 走看看