文章目录
- 1.多线程
-
- [什么是 CAS?ABA 问题如何解决?Java 中哪些类用到了 CAS?](#什么是 CAS?ABA 问题如何解决?Java 中哪些类用到了 CAS?)
- 线程池的核心参数?核心线程数和最大线程数如何设置?拒绝策略有哪些?
- 2.高并发
- 3.springboot架构
1.多线程
线程和进程的区别
一个程序一个进程
一个程序包括多个线程(必须有一个主线程)
线程的创建方式
有三种必须全部回答上来
-
继承Thread类,重写run方法,调用start方法启动线程
-
实现Runnable接口,重写run方法,创建Thread对象
new Thread(new Runnable),调用start方法启动该线程。 -
实现Callable<T>接口,重写run方法,注意Callable有返回值。
javapackage 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