线程池

一、线程池概念

线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源

 

 

二、使用线程池方式--Runnable接口

1.Executors:线程池创建工厂类

public static ExecutorService newFixedThreadPool(int nThreads):返回线程池对象

2.ExecutorService:线程池类

Future<?> submit(Runnable task):获取线程池中的某一个线程对象,并执行

3.Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

 

4.使用线程池中线程对象的步骤:

创建线程池对象

创建Runnable接口子类对象

提交Runnable接口子类对象

关闭线程池

 

代码:

package com.oracle.Runnable;

public class MyRunnable implements Runnable{

    @Override

    public void run() {

        for(int i=0;i<50;i++){

            System.out.println("run-----"+i);

        }

    }

}

 

package com.oracle.Runnable;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class Demo03 {

     public static void main(String[] args) {

         // Executors 线程池工厂类

         // ExecutorService 线程池工厂类

         // 获取线程池对象

         ExecutorService es = Executors.newFixedThreadPool(2);

         // 创建线程任务对象

         MyRunnable mr = new MyRunnable();

         // 执行线程任务

         es.submit(mr);

         es.submit(mr);

         es.submit(mr);

         //释放资源

         es.shutdown();

     }

}

 

运行结果:

 

三、使用线程池方式—Callable接口

1.Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。

2.ExecutorService:线程池类

3.<T> Future<T> submit(Callable<T> task):获取线程池中的某一个线程对象,并执行线程中的call()方法

4.Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

 

使用线程池中线程对象的步骤:

1.创建线程池对象

2.创建Callable接口子类对象

3.提交Callable接口子类对象

4.关闭线程池

 

 代码:

package com.oracle.Runnable;

import java.util.concurrent.Callable;

public class MyCallable implements Callable<String> {

    public String call() throws Exception {

        return "abc";

    }

}

 

package com.oracle.Runnable;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future;
public class Demo04 { public static void main(String[] args) throws InterruptedException, ExecutionException { //创建线程任务 MyCallable mc=new MyCallable(); //获取线程池工厂 ExecutorService es=Executors.newFixedThreadPool(2); Future<String> f=es.submit(mc); //创建返回值 String str=f.get(); System.out.println(str); } }

 

运行结果:

 

 

posted @ 2020-03-01 15:08  墨染千城  阅读(118)  评论(0)    收藏  举报