![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 83
多线程
老蛙@
卷
展开
-
多线程设计模式
线程T1需要终止线程T2时,如果使用stop方法直接终止线程T2,T2申请的锁得不到释放;因此使用两阶段终止模式更加优雅。原创 2022-10-22 13:01:41 · 374 阅读 · 0 评论 -
线程安全集合类
且JDK7中的扩容后的rehash操作是直接在原数组上进行的,当两个线程同时扩容时,假设链表:a-b-c-null,线程1在rehash时会将尾部结点插在头部,变为:c-a-b-null,假设本来此时线程2已经到了c,接下来到null就结束循环,但由于线程1的影响导致c.next变为a所以会继续循环,同理线程1也会收到线程2的影响进入死循环。实现了懒惰初始化,在构造器中仅仅计算了table的大小,并没有初始化table,在第一次使用的时候才会真正的创建。,使用一个Dummy结点来占位,item为null。原创 2022-10-20 11:43:58 · 2453 阅读 · 0 评论 -
JUC下的并发工具
Exchanger是一个用于线程间写作的工具类,进行线程间的数据交换。他提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。原创 2022-10-12 20:57:41 · 254 阅读 · 0 评论 -
线程池
**** @Description 自定义线程池// 如果队列已满,则死等队列有空闲 RejectPolicy < Runnable > alwaysWait =(queue , task) -> {};// 如果队列已满,则等待1s RejectPolicy < Runnable > waitSec =(queue , task) -> {};// 如果队列已满,则放弃入队 RejectPolicy < Runnable > giveUp =(queue , task) -> {};原创 2022-10-11 16:42:30 · 875 阅读 · 2 评论 -
JUC下的锁
**** @Description 自定义锁,不可重入、独占锁/**** 独占锁,同步器类/*** 尝试加锁* @param arg 定义可重入锁时使用到该参数* @return// 通过cas对state进行修改,cas锁的形式实现独占锁 if(compareAndSetState(0 , 1)) {// 如果cas修改成功,即加锁成功,将Owner设置为当前线程 setExclusiveOwnerThread(Thread . currentThread());} /**原创 2022-10-08 17:53:58 · 200 阅读 · 0 评论 -
不可变与无状态
SimpleDateFormat是作日期字符串格式化转换的类,,在多线程场景会出现问题或者使用DateTimeFormat类,这个类底层就是不可变的,即状态无法被修改,所以是线程安全的。原创 2022-10-04 14:15:58 · 444 阅读 · 0 评论 -
无锁并发-CAS与原子类
add方法主要做了对无竞争时使用base进行累加,和对已经创建Cell的线程进行累加操作,在累加的cas操作失败时,表示出现了竞争,则进入longAccumulate方法创建Cell。AtomicMarkableReference只使用一个布尔值做一个标记,可以用来保证某个操作只进行一次,当标记发生改变时,就不再进行操作,他不会统计改变的次数,而只是检测是否改变。,内部方法基本相同,内部提供了部分已经封装好的方法供开发者使用,同时也可以使用提供的CAS方法来自己实现CAS操作。原创 2022-10-03 23:24:56 · 422 阅读 · 0 评论 -
阻塞悲观锁-synchronized
mavenlogback.xml线程安全问题一个程序运行多个线程本身是没有问题的,问题出现在多个线程访问共享资源(多个线程对共享资源读写操作时发生指令交错),一段代码内如果存在对共享资源的多线程读写操作,这段程序称为临界区多个线程在临界区执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件预期结果为10000,实际结果为6979synchronized是阻塞式的解决方案,俗称对象锁,他会采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其他线程再想获取这个对象锁就会被阻原创 2022-10-02 20:37:54 · 877 阅读 · 0 评论 -
Java多线程基础
mavenlogback.xml线程的创建直接创建Thread将线程(Thread)与可执行任务(Runnable)解耦,提高灵活性Thread和Runnable的关系FutureTask是Runnable子类(FutureRunnable)的子类可以接收Callable类型的参数,是对Runnable的扩展,可以用来获取任务的执行结果Java方法的运行是基于JVM栈的,每个线程启动时,JVM就会给它分配一块栈内存因为一些原因导致cpu不再执行当前线程没转而执行另一个线程,就会发生线程上下文原创 2022-09-27 13:54:31 · 306 阅读 · 0 评论 -
多线程基本概念
不需要等待结果返回,就能继续运行就是异步。:需要等待结果返回,才能继续运行就是同步。:同一个时间段,多个线程串行执行;:同一时刻,多个线程同时执行;原创 2022-09-24 10:45:25 · 237 阅读 · 0 评论