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

相关推荐
咕叽吧咔1 天前
LeetBook乐扣题库 142. 环形链表 II
java·数据结构·leetcode·链表
Sylvia33.1 天前
体育数据API实战:用火星数据实现NBA赛事实时比分与状态同步
java·linux·开发语言·前端·python
Coder-coco1 天前
家政服务管理系统|基于springboot + vue家政服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·家政服务管理系统
人道领域1 天前
Day | 07 【苍穹外卖 :用户端添加购物车】
java·开发语言·数据库·后端·苍穹外卖
不像程序员的程序媛1 天前
springboot对于@PathVariable自动解码问题
java·前端·javascript
weixin_456321641 天前
Java架构设计:Redis RDB持久化深度解析(原理+实战+避坑)
java·开发语言·redis
殷紫川1 天前
一文搞懂 MySQL 核心架构:Server 层与存储引擎全拆解
mysql·架构
NGC_66111 天前
CMS收集器详解
java·开发语言·jvm
毅炼1 天前
Spring总结(2)
java·数据库·sql·spring
xuhaoyu_cpp_java1 天前
Servlet学习
java·笔记·学习