多线程

并行:同一时刻,多个指令在cpu同时执行

并发:同一时刻,多个指令在cpu交替执行

进程:正在运行的软件

 

 

1:继承 Thread类

优点:编程简单  可以直接使用Thread类中的方法

缺点:可扩展性差,不能再继承其他的类。

2:实现Runnable接口  无返回值

3:实现Callable接口  有返回值

优缺点与继承Thread方法相反。

 

 

Thread.currentThread:当前线程执行的主方法
Thread.sleep:线程等待(休眠)多少时间。
synchronized:锁
死锁的概念:由于两个或者多个线程互相持有对方所需要的资源,导致线程处于等待的状态,无法继续执行
wait: 导致当前线程等待,知道另外一个线程调用对象的notify()方法或者notifyAll()方法。
notify:唤醒当前等待对象监视器的单个线程
notifyAll:唤醒正待等待对象监视器的所有线程
 
Executors.newFixedThreadPool(x):  x:指定线程驰上线
创建线程池:
1  ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,              //核心线程数量                    --》不能小于0
2                 3,                                                                      //最大线程数                      --》不能小于0 && 大于等于核心线程数量
3                 10,                                                                    //空闲线程最大存活时间              --》不能小于0
4                 TimeUnit.SECONDS,                                                      //空闲线程最大存活时间的单位          --》必须是时间单位 TimeUnit
5                 new ArrayBlockingQueue<>(10)                                       //任务队列                       --》 不能为null
6                 , Executors.defaultThreadFactory(),                                    //创建线程工厂                   --》 不能为null
7                 new ThreadPoolExecutor.CallerRunsPolicy());                            //任务的拒绝策略                  --》 不能为null
Volatile关键字:强制线程每次在使用的时候,都会看一下共享区域的最新值。但是它不具有原子性。
原子性:多个操作是一个不可分割的整体,例如:我将钱从A卡打到B卡,要么A卡发送失败,同时B卡接收失败,要么同时成功。不会有别的情况。

Atomicinteger():就具备原子性,他的底层运用了CAS算法。

incrementAndGet:Atomicinteger的对象的自增方法。

CAS算法:有三个操作数(内存值V,旧的预期值A,要修改的值B),当旧的预期值A == 内存值,此时修改成功,将V改为B;当旧的预期值A  != 内存值,此时修改失败,不做任何操作,并重新获取现在的最新值(这个重新获取的动作就是自旋)

 

悲观锁和乐观锁:

相同点:悲观锁和乐观锁都是在线程情况下,保证共享数据的安全性。

不同点:synchronized总是从最坏的角度出发,认为没次获取数据的时候,别人都有可能修改,所以在每次操作共享数据之前,都会上锁,同时也称为:悲观锁。

cas总是从乐观的角度出发,假设每次获取数据别人都不会修改,所以不会上锁。不过在修改共享数据的时候,会检查一下,别人有没有修改过这个数据。如果别人修改过,那么再次过去现在的最新的值;如果别人没有修改过,那么我现在直接修改共享数据的值。(乐观锁)

 

posted @   小韩小寒,不能喊烦  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示