多线程,高并发、物联网以及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架构

相关推荐
金銀銅鐵12 分钟前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
野生技术架构师2 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展
AI自动化工坊2 小时前
Late框架技术深度解析:5GB VRAM实现10倍AI编码效率的工程架构
人工智能·5g·架构·ai编程·late
空中海2 小时前
第六篇:架构篇 — 微服务、部署、高并发与专家级能力
微服务·云原生·架构
小袁拒绝摆烂2 小时前
多表关联大平层转JSON树形结构
java·json
Wave8453 小时前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
ja哇3 小时前
大厂面试高频八股
java·面试·职场和发展
yongyoudayee3 小时前
CRM架构演进:从记录系统到执行引擎的技术解析
架构
yoyo_zzm4 小时前
Laravel6.x新特性全解析
java·spring boot·后端