java多线程
文章平均质量分 84
扶我起来继续写
积跬步、至千里! 学无涯、不言弃!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java线程池之ThreadPoolExecutor
(1)自己创建一个单线程串行执行任务,如果任务执行失败而终止那么没有任何补救措施,而线程池还会新建一个线程,保证池的正常工作。(1)线程池中刚开始没有线程,当一个任务提交给线程池后,线程池会创建一个新线程来执行任务。整个线程池表现为线程数会根据任务量不断增长,没有上限,当任务执行完毕,空闲。,意味着:全部都是救急线程(60s 后可以回收),救急线程可以无限创建。时,会放入无界队列排队。(3)如果队列选择了有界队列,那么任务超过了队列大小时,会创建。并没有线程空闲,这时再加入任务,新加的任务会被加入。原创 2024-11-24 21:30:02 · 1312 阅读 · 0 评论 -
ReentrantLock
相对于它具备如下特点:(1)可中断 : lock.lockInterruptibly 与 thread.interrupt()(2)可以设置超时时间 :lock.tryLock(long timeout, TimeUnit unit)(3)可以设置为公平锁/非公平锁 :new ReentrantLock(boolean fair)公平锁(FairSync):线程获取锁的顺序按照线程加锁的顺序来分配(先来先得)非公平锁(默认,NonfairSync):获取锁的抢占机制,随机。原创 2024-11-18 17:16:42 · 899 阅读 · 0 评论 -
Synchronized原理
由于轻量级锁会自旋,即不会放弃CPU,那么对一些执行时间短的任务而言,用轻量级锁可以减少线程切换的时间(对比重量级锁)。(1)偏向锁通过对比 Mark Word 解决加锁问题,避免执行CAS操作。(2)轻量级锁是通过用 CAS 操作和自旋来解决加锁问题,避免线程阻塞和唤醒而影响性能。(3)重量级锁是将除了拥有锁的线程以外的线程都阻塞。原创 2024-11-17 21:36:24 · 921 阅读 · 0 评论 -
Java中的CAS
CAS:全称Compare and swap,字面意思:“比较并交换”,一个CAS涉及到以下操作:我们假设内存中原数据V,旧的预期值A,需要修改的新值B。1. 比较A与V是否相等(比较)2. 如果比较相等,将B写入V。(交换)3. 返回操作是否成功。多个线程同时对一个公共资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。// 需要不断尝试,直到成功为止// 比如拿到了旧值 1000// 在这个基础上 1000-10 = 990/*原创 2024-11-17 18:03:32 · 2988 阅读 · 0 评论 -
volatile原理
(4)线程2 执行 ready = true,切换到线程1,进入 if 分支,相加为 0,再切回线程2 执行 num = 2。是从自己工作内存中的高速缓存中读取这个变量 的值,结果永远是旧值。写屏障会确保指令重排序时,不会将写屏障之前的代码排在写屏障之后。读屏障会确保指令重排序时,不会将读屏障之后的代码排在读屏障之前。的值缓存至自己工作内存中的高速缓存中, 减少对主存中 run。)保证在该屏障之后,对共享变量的读取,加载的是主存中最新数据。)保证在该屏障之前的,对共享变量的改动,都同步到主存当中。原创 2024-11-16 11:38:58 · 453 阅读 · 0 评论 -
Monitor的原理
时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入 EntryList 重新竞争。给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向。,就会进入 EntryList BLOCKED。Lightweight Locked:轻量级锁。Heavyweight Locked:重量级锁。中等待的线程来竞争锁,竞争的时是非公平的。方法进入 WAITING 状态的线程。执行完同步代码块的内容,然后唤醒。的线程都处于阻塞状态,不占用。Biased:偏向锁状态。线程发现条件不满足,调用。原创 2024-11-12 06:40:26 · 506 阅读 · 0 评论 -
线程的生命周期
(4)WAITING(等待):表示线程处于无限制等待状态,等待一个特殊的事件来重新唤醒,如通过wait()方法进行等待的线程等待一个 notify()或者 notifyAll()方法,通过join()方法进行等待的线程等待目标线程运行结束而唤醒,一旦通过相关事件唤醒线程,线程就进入了 RUNNABLE 状态继续运行。(5)TIMED_WAITING(计时等待):表示线程进入了一个有时限的等待,如sleep(3000),等待3秒后线程重新进行 RUNNABLE 状态继续运行。线程刚被创建,但是还没有调用。原创 2024-11-12 05:55:39 · 300 阅读 · 0 评论
分享