面试知识储备-多线程

1.线程的概念

线程使得在一个程序中可以同时执行多个任务。在 Java 应用程序中,多个线程可以同时运行,例如一个线程可以处理用户输入,另一个线程可以进行后台数据处理。

2.创建线程的方式

(1)重写thread类中的run方法,创建新的线程后使用start()方法中调用

(2)实现一个Runnable接口,在run方法中编写代码,使用时,实现了Runnable接口的对象传递给Thread类的构造函数

3.线程启动后不需要销毁

当线程的任务执行完毕,即run()方法执行完成后,线程会自然进入死亡状态,此时会被垃圾回收器回收资源。

4.线程不一定要在启动类中使用

可以在任一类中,比如订单服务类,同时处理发送通知邮件和更新库存等

5.线程池的概念

线程池是一组预先创建好的线程,它们处于等待状态,随时准备执行任务。当有任务需要执行时,线程池中的一个线程会被分配来执行该任务。任务执行完成后,线程不会被销毁,而是返回线程池继续等待下一个任务。

6.线程池的优势

①可以复用线程,减少创建和销毁等耗时操作

②控制线程数量,避免资源竞争

③自动管理线程的生命周期,比如分配任务 ,回收线程等

7.创建线程池的方式

(1)创建固定大小的线程池:使用Executors.newFixedThreadPool(int nThreads)方法

复制代码
   ExecutorService executorService = Executors.newFixedThreadPool(5);

(2)创建可缓存的线程池:使用Executors.newCachedThreadPool()方法,线程在 60 秒内没有被使用就会被回收。

(3)使用Executors.newSingleThreadExecutor()方法可以创建一个单线程的线程池

(4)ThreadPoolExecutor类直接创建一个自定义的线程池,灵活地控制线程池的参数,如核心线程数、最大线程数、线程空闲时间、任务队列等。

8.Lambda表达式的写法

Lambda 表达式可以理解为一种简洁的匿名函数写法。它由参数列表、箭头符号 "->" 和方法体组成。比如() -> updateInventory(order) ()代表无参 ,同时参数也不可以有默认值

复制代码
   Thread thread1 = new Thread(() -> {
       ClientConnection client = connections.get(1);
       if (client!= null) {
           System.out.println("Processing request for client " + client.getClientId() + " by thread: thread1");
       }
   }, "thread1");
   thread1.start();

   Thread thread2 = new Thread(() -> {
       ClientConnection client = connections.get(2);
       if (client!= null) {
           System.out.println("Processing request for client " + client.getClientId() + " by thread: thread2");
       }
   }, "thread2");
   thread2.start();
相关推荐
暖和_白开水8 小时前
数据分析agent (七):contextvars 模块上下文request_id
java·前端·数据分析
Android研究员8 小时前
Android进阶之事件分发机制深度剖析
android·前端·面试
触底反弹8 小时前
🔥 AI 写代码总翻车?这套实战方法论救了我
人工智能·面试·程序员
风栖柳白杨8 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
weixin_727535628 小时前
MinIO大文件上传深度拆解:从原理到生产落地的完整指南
java·中间件
imbackneverdie9 小时前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校
摇滚侠9 小时前
Java 全栈开发实战教程 课程笔记 34-36
java·笔记
芝士熊爱编程9 小时前
创建型模式-单例模式
java·单例模式·设计模式
大模型码小白9 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring
weixin_BYSJ198710 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php