多线程,高并发、物联网以及spring架构的面试题-->周

文章目录

1.多线程

线程和进程的区别

一个程序一个进程

一个程序包括多个线程(必须有一个主线程)

线程的创建方式

有三种必须全部回答上来

  1. 继承Thread类,重写run方法,调用start方法启动线程

  2. 实现Runnable接口,重写run方法,创建Thread对象new Thread(new Runnable),调用start方法启动该线程。

  3. 实现Callable<T>接口,重写run方法,注意Callable有返回值。

    java 复制代码
    package com.hsh.exercise7;
    import java.util.concurrent.Callable;
    public class CallableThread implements Callable<String> {
        private int num;
        /**
         *
         * @param num : 累加次数。
         */
        public CallableThread(int num){
            this.num = num;
        }
        @Override
        public String call() throws Exception {
            int sum =0;
            for (int i = 0; i <= num; i++) {
                sum+=i;
            }
            return "CallableThread返回值0到" + num + "的累加=" +sum;
        }
    }
    package com.hsh.exercise7;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    public class Main {
        public static void main(String[] args) {
            CallableThread callableThread = new CallableThread(1);
            FutureTask<String> futureTask = new FutureTask<>(callableThread);
            Thread thread = new Thread(futureTask);
            thread.start();
    
            try {
            	// 输出值。
                System.out.println(futureTask.get());
    
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            } catch (ExecutionException e) {
                throw new RuntimeException(e);
            }
        }
    }

线程调用run方法和start方法的区别

调用run方法就是调用类中的普通方法是单线程。

调用start方法就是开启多线程

线程的五种状态

创建状态:new Thread()

就绪状态:调用start()方法

运行状态:执行run方法

阻塞状态:执行sleep(亳秒),join(亳秒)进人阻塞,恢复后改为就绪状态->运行状态

死亡状态:run()运行结束

五种状态的常用方法

说 明
void setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态
wait() 暂停一个线程
notify() 唤起一个线程

sleep,join,yield,wait,notify的区别。

把上面的说一下就行。

注意:join写在那个线程就阻塞谁,谁调用的join就强制执行

sleep,join使用毫秒1000毫秒=1秒

什么是线程安全

多个线程操作同一个共享资源时,将引发数据不安问题。

程锁:使用synchronized关键

线程安全与不安全对比

** ** 方法是否同步 效率比较 适合场景
线程安全 多线程并发共享资源
非线程安全 单线程

常用对象线程安全问题:

ArrayList线程不安全,Vector线程安全

HashMap 线程不安全,Hashtable线程安全

StringBuider 线程不安全,StrinBufer残线程安全

锁有几种

同步方法

同步代码块

锁对象

什么是 CAS?ABA 问题如何解决?Java 中哪些类用到了 CAS?

CAS(Compare-And-Swap):原子操作,比较内存值与预期值,一致则更新;ABA 问题:值被修改后恢复原值导致判断失误,解决方案:版本号(AtomicStampedReference)、时间戳;应用:AtomicInteger、ConcurrentHashMap(JDK1.8)、ReentrantLock

线程池的核心参数?核心线程数和最大线程数如何设置?拒绝策略有哪些?

2.高并发

3.springboot架构

相关推荐
jgyzl1 天前
2025.12.21 学习web前必要知识点梳理
java·hash
a程序小傲1 天前
中国邮政Java面试被问:gRPC的HTTP/2流控制和消息分帧
java·开发语言·后端
forestsea1 天前
Springboot 4.0十字路口:虚拟线程时代,WebFlux与WebMVC的终极选择
java·后端·spring
Sylvia-girl1 天前
Java之构造方法
java·开发语言
予枫的编程笔记1 天前
深度解析Kibana:从基础到进阶的全维度数据可视化指南
java·人工智能·elasticsearch·kibana
galaxyffang1 天前
漏桶、令牌桶与滑动窗口业务场景选型
java
七夜zippoe1 天前
依赖注入:构建可测试的Python应用架构
开发语言·python·架构·fastapi·依赖注入·反转
moxiaoran57531 天前
使用策略模式+装饰器模式实现接口防重复提交
java·装饰器模式
LucidX1 天前
Kubernetes集群架构与组件
容器·架构·kubernetes