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

相关推荐
小天源3 分钟前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践
jvm·nginx·网络安全·架构·网络监控
紧跟先前的步伐16 分钟前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
数据工匠老o28 分钟前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
const_qiu41 分钟前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
Promising_GEO1 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析
大文说跨境1 小时前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
CoderYanger1 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
破烂三角裤1 小时前
AI 应用上线后如何判断质量:Prompt 版本、评测集与可观测性
架构
第404号工位1 小时前
手机到底有没有偷听我们?我抓包了 72 小时,抓到了真凶
linux·人工智能·架构