创建线程的四种方式(二)

线程:

CPU调度和分配的最小单位,基本不浪费系统资源,只占用少数程序必备的资源。

上篇文章说了前三种方式,下面来说最后一种:

线程池方式创建线程:

为什么要用线程池:
如果并发量很多,并且每个线程都是执行时间很短就结束了,频繁的创建和销毁线程是非常消耗时间的。所以出现了线程池.
线程池
执行完任务后,并不销毁,而是重新回到线程池内,等待下个任务,跟数据库连接池一样。
线程池使用规则
1.工厂原本10个工人(有效线程),每个人只能做一件任务
2.当有任务来了,就分配给工人去做。(分配线程
3.当10个工人都在做任务的时候,还来了任务,就放在等待队列中
如果新增任务的速度远远大于工人做任务的速度,就得有补救措施,招聘4个临时工(线程扩展
4.如果14个工人的速度还是不够,那就考虑不在接受任务了(超过了最大连接数)
等14个工人有空闲的时候,并且任务增长速度较慢,就会考虑辞掉4个临时工,毕竟额外请工人要花钱(把扩展线程销毁

创建线程实现方式:
1. 定长线程池:
package com.jym.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @program: thread
 * @description: 线程池测试类
 * @author: jym
 * @create: 2020/01/27
 */
public class TestThreadPool {
    public static void main(String[] args) {
        // 创建线程池 定长的线程池
        ExecutorService pool = Executors.newFixedThreadPool(5);
        // 将线程交给线程池来管理
        PoolDemo poolDemo = new PoolDemo();
        for(int i=0,j=5;i<j;i++){
            pool.submit(poolDemo);
        }
        // 关闭
        pool.shutdown();
    }
}

class PoolDemo implements Runnable{

    public void run() {
        for (int i = 0, j=10;i<j;i++){
            System.out.println("线程"+Thread.currentThread().getName()+"跑啦");
        }
    }
}
2.定时线程池:
package com.jym.thread;

import java.util.concurrent.*;

/**
 * @program: thread
 * @description: 定时的线程池测试类
 * @author: jym
 * @create: 2020/01/27
 */
public class SchedulePoolTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 线程大小为5个
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
        // 调用schedule方法,第一个参数为callable实现类,第二个为时间间隔,第三个为时间单位
        for(int i=0; i<5; i++ ){
            ScheduledFuture<Integer> scheduledFuture = pool.schedule(new Callable<Integer>() {
                public Integer call() throws Exception {
                    int sum = 0;
                    for(int j=0;j<10;j++){
                        sum += j;
                    }
                    return sum;
                }
            },1,TimeUnit.SECONDS);
            System.out.println(scheduledFuture.get());
        }
        pool.shutdown();
    }
}

学习年限不足,知识过浅,说的不对请见谅。

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

发布了71 篇原创文章 · 获赞 54 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/weixin_43326401/article/details/104095935