java的多线程和线程池的使用


多线程大大提高程序运行效率,我们在开发过程中经常会开启一个线程来执行一些费时的任务。开启一个线程有4种方式,在下面的文章我将详细的去讲解。

继承Thread

继承Thread去执行任务,确实可以开启一个线程去执行任务,如果经常的去开启一些线程,也会导致系统资源的浪费。

public static class Mythread extends Thread{
        @Override
        public void run() {
            System.out.println("当前线程"+Thread.currentThread().getId());
            int i = 10/2;
            System.out.println("运行结果"+i);
        }
    }
//调用线程。
public static void main(String[] args) throws ExecutionException, InterruptedException {
        /**thread执行方式*/
        Mythread mythread = new Mythread();
        mythread.start();//启动线程
        System.out.println("main--end");
}

实现Runnale接口。

public static class MyRunable implements Runnable {

    @Override
    public void run() {
        System.out.println("当前线程"+Thread.currentThread().getId());
        int i = 10/2;
        System.out.println("运行结果"+i);

    }
}

调用。

/**
 * runable的启动方式
 */

MyRunable runable = new MyRunable();
new Thread(runable).start();
System.out.println("main--end");

Callable

/**
 * Callable可以允许有返回值
 */

public static class Callale01 implements Callable {

    @Override
    public Integer call() throws Exception {
        System.out.println("当前线程"+Thread.currentThread().getId());
        int i = 10/2;
        System.out.println("运行结果"+i);
        return i;
    }
}

调用。这里需要用callable构建futureTask


/**
 * callale的启动方式
 */
FutureTask futureTask =new FutureTask<>(new Callale01());
//取返回结果。
Integer i = futureTask.get();
new Thread(futureTask).start();
System.out.println("返回结果是:"+i);

线程池

线程池才是我们java开发中,经常用到一种开启多线程的方式,线程池,自己去管理线程。可以节省系统资源。通常我们会将下面的一些配置写在一些配置类中

/**
 * 七大参数
 * corePoolSize: 1.核心线程数[一直存在]: 线程池创建好了以后。就准备就绪的线程数量。
 * maxinumPoolSize: 2 最大线程数量
 * keepaliveTime: 存活时间。空闲线程的最大的等待时间。
 * unit  等待时间的单位
 * blockingQueue 阻塞队列。如果任务很多就会放在队列里面,只要有线程空闲了,就会去队列里面去取。
 * threadFactory :线程的工厂。
 * RejectExecutionHandler :如果队列满了。按照我们指定的策略。拒绝执行任务。
 *
 */
 ThreadPoolExecutor executor = new ThreadPoolExecutor(5,100,10,TimeUnit.SECONDS,
          new LinkedBlockingQueue<>(100),
                                                    Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

常见的4种线程池。

1 newCachedThreadPool()

创建一个可缓存的线程池,如果线程池长度超过了处理的需要,可灵活的回收空闲线程。若无可回收。则创建新线程。

Executors.newCachedThreadPool();

2.newFixedThreadPool(6)

创建一个固定大小的线程池。

3 newScheduledThreadPool()

定时任务的线程池。

4.newSingleThreadExecutor()

Executors.newSingleThreadExecutor();
展开阅读全文

页面更新:2024-03-13

标签:线程   费时   队列   缓存   长度   节省   灵活   接口   效率   确实   数量   大小   工厂   方式   时间   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top