• java多线程--线程池的使用


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

          线程池的每一个线程执行完毕后,并不会死亡,会再次回到线程池中变成空闲状态,等待下一个对象来调用,类比于数据库连接池.JDK1.5以后,java内置线程池.

         JDK5新增了一个Executors工厂类来产生线程池,通过查文档我们发现,产生线程池很多方法,常用的有以下几个方法:

        •      public static ExecutorService newCachedThreadPool()
        •      public static ExecutorService newFixedThreadPool(int nThreads)
        •      public static ExecutorService newSingleThreadExecutor()

    这些方法的返回值都是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或Callable对象代表的线程,提供了如下方法:

           submit(Runnable task);

           submit(Callable<T> task);

    使用线程池开辟一个新线程的步骤,

    1.创建线程池对象

    2.创建Runnable实例

    3.提交Runable实例

    4.关闭线程池(选择)

    下面通过代码来演示:

    package com.wang.reflect;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    class MyRunnable implements Runnable{
    	@Override
    	public void run() {
    
    		for(int i=0;i<100;i++){
    			System.out.println(Thread.currentThread().getName()+"::"+i);
    		}
    	}
    }
    
    public class ThreadPoolDemo {
    
    	public static void main(String[] args) {
    		//创建线程池对象
    		ExecutorService service = Executors.newFixedThreadPool(2);
    		//执行Runnable对象代表的线程
    		service.submit(new MyRunnable());
    		service.submit(new MyRunnable());
    		//关闭线程池
    		service.shutdown();
    	}
    }
     

    讲到了线程池,就不得不提多线程实现的第三种方法,实现Callable<T>接口,这种方法实现的多线程,就是依赖于线程池而存在的,下面用代码来演示:

    package com.wang.reflect;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    
    class MyCallable implements Callable{
    
        //Callable是一个带泛型的接口,这里先不使用
        @Override
        public Object call() throws Exception {
            for(int i=0;i<100;i++){
                System.out.println(Thread.currentThread().getName()+"::"+i);
            }
            return null;
        }
        
    }
    public class CallableDemo {
    
        public static void main(String[] args) {
            //创建线程池对象
            ExecutorService service = Executors.newFixedThreadPool(2);
            //执行Runnable对象代表的线程
            service.submit(new MyCallable());
            service.submit(new MyCallable());
            //关闭线程池
            service.shutdown();
        }
    }



  • 相关阅读:
    csrf(跨站请求伪造)
    CBV加装饰器
    Django的中间件
    form组件简介
    统计日期天数及拓展使用
    回文数的定义以及拓展使用
    排序——冒泡,快速,选择,插入
    No resources found. Error from server (NotAcceptable): unknown (get pods)
    编程题训练5
    K8s集群内热改代码
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5351448.html
Copyright © 2020-2023  润新知