线程面试题总结(更新中)

线程面试题总结

前言

第一次写文章,慢慢走在程序员的道路上,也阅读过好多前辈的博客,其中借用了大佬们的文章技术点,请多多包涵,有问题的家人们可以直接私信我,本人知错就改,未来请多多指教

1. 使用线程池的优点

首先我们将task创建出来,然后我们会创建一个新的线程Thread,调用start()方法之后启动线程,例如我们需要执行10个任务,我们就需要创建10个线程分别执行,执行完任务之后该线程就会被销毁,接下来如果再有新的任务,还需要创建新的线程,不但消耗了线程创建时间同时还消耗了内存空间,线程的复用性低。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,线程池不仅能够保证内核的充分利用,还能防止过分调度。
使用线程池的优点

  • 降低资源消耗:重复利用创建好的线程来执行任务,避免多次创建和销毁。
  • 提高响应速度:不需要创建新线程,所以不需要等待可以立即执行。

补充:线程池里创建好线程之后,可以重复调用execute()方法,将需要执行的任务交给线程池,任务提交后,线程池会自动分配线程去执行任务,最后调用shutdown()方法关闭线程池

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * @Author: Yang LuJia
 * @Date: 2022/08/10
 * @Description: 线程池demo
 */
public class ThreadDemo {
    public static void main(String[] args) {
        Runnable task1 = new Task();
        Runnable task2 = new Task();
        Runnable task3 = new Task();
        Runnable task4 = new Task();
        Thread t1 = new Thread(task1);
        Thread t2 = new Thread(task2);
        Thread t3 = new Thread(task3);
        Thread t4 = new Thread(task4);
//        Thread t5 = new Thread(task1,task2,task3);//错误写法
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        //java.lang.IllegalThreadStateException 会报异常错误,只会有一个线程对象。
        //t4.start();//这个对象启动一次后,如果再被启动就会报上面的错误。
    }
}
 class ThreadPoolDemo {
    public static void main(String[] args) {
        Runnable task1 = new Task();
        Runnable task2 = new Task();
        Runnable task3 = new Task();
        Runnable task4 = new Task();
        ExecutorService threadpool = Executors.newSingleThreadExecutor();
        threadpool.execute(task1);
        threadpool.execute(task2);
        threadpool.execute(task3);
        threadpool.execute(task4);
        threadpool.execute(task4);
        threadpool.execute(task4);
        threadpool.shutdown();
    }
}
 class Task implements Runnable{
    @Override
    public void run() {
        System.out.println("当前线程:"+Thread.currentThread().getName());
    }
}

2. 线程池的属性

  • ThreadFactory(线程工厂)

  • corePoolSize(核心线程数,线程池的基本大小)

  • workQueue(任务队列)

  • maximumPoolSize(最大线程数)

  • handler(拒绝策略)

  • keepAliveTime(保持存活时间)

  • RejectedExecutionHandler(饱和策略)

3. 线程池的5个状态

  • RUNNING:运行中

  • SHUTDOWN:关闭

  • STOP:停止

  • TIDYING:调整,所有任务都已终止

  • TERMINATED:终止,线程池结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值