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

相关推荐
徐徐同学34 分钟前
cpolar为IT-Tools 解锁公网访问,远程开发再也不卡壳
java·开发语言·分布式
heart_fly_in_sky1 小时前
Mali GPU架构深度解析:Bifrost架构与优化策略(Lesson 4)
架构
2501_933329551 小时前
企业级AI舆情中台架构实践:Infoseek系统如何实现亿级数据实时监测与智能处置?
人工智能·架构
Mr.朱鹏2 小时前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
白露与泡影3 小时前
2026版Java架构师面试题及答案整理汇总
java·开发语言
历程里程碑3 小时前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
qq_229058014 小时前
docker中检测进程的内存使用量
java·docker·容器
我真的是大笨蛋4 小时前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
钦拆大仁4 小时前
Java设计模式-单例模式
java·单例模式·设计模式
小手cool4 小时前
在保持数组中对应元素(包括负数和正数)各自组内顺序不变的情况下,交换数组中对应的负数和正数元素
java