
多线程
文章平均质量分 65
皮夹子
这个作者很懒,什么都没留下…
展开
-
多线程线程池
池化技术是一种提前准备和保存大量资源的编程技巧,以便在需要时可以重复使用这些预先准备的资源。在请求量大时,原创 2024-04-22 19:59:42 · 569 阅读 · 0 评论 -
多线程锁的总结
公平锁与非公平锁公平锁:非常公平,不可以插队非公平锁:不公平,可以插队,谁能力强,把谁优先可重入锁什么是可重入锁?可重入锁,也被称为递归锁,它指的是在同一个线程中,当外层方法获取锁的时候,如果内层方法也需要获取同一把锁,那么内层方法会自动获取到锁,不会因为外层方法已经获取过该锁且尚未释放而导致线程阻塞synchronized关键字和ReentrantLock都是典型的可重入锁实现。当线程重复获取同一个锁时,如果是不可重入锁,那么每次获取锁都需要进行线程同步,这会增加不必要的性能开销。原创 2024-04-22 20:00:24 · 492 阅读 · 0 评论 -
理解CAS
之前就谈论过,表示synchronized是不太友好的操作,在执行到锁时,会经历用户态与内核态的转变,非常耗时,而synchronized是一个很小的区域,就是细粒度很高的操作,而为了这一点点的操作去耗时,是非常不划算的。是非常消耗时间的,而线程的执行时间是非常短的,所以出现了线程池,只需要创建一次线程,下次使用的时候,就可以直接使用线程池中的线程了。线程B ,也拿到了number的值,然后将值 = 3 ,然后再次操作, number = 1,改回去了。因为是操作内存的,所以调度是非常快的。原创 2024-04-21 14:21:53 · 848 阅读 · 0 评论 -
单例模式与反射创建对象
如何知道枚举类是有参构造还是无参构造这里显示了是一个无参构造对于字节码文件的查看,显示的也是无参构造。原创 2024-04-21 14:20:23 · 1880 阅读 · 0 评论 -
理解JMM
Java内存模型,不存在的东西,是一个概念,是一个约定。原创 2024-04-20 19:46:10 · 1869 阅读 · 0 评论 -
SynchronousQueue
实现了BlockingQueue 和 Queue其中每个插入操作必须等待另一个线程相应的删除操作同步队列没有任何容量,甚至没有一个容量。原创 2024-04-20 19:43:51 · 170 阅读 · 0 评论 -
BlockingQueue
BlockingQueu方法有四种形式,具有不同的操作方式,不能立即满足,但可能在将来的某个时间点满足:一个抛出异常,第二个返回一个特殊值(原创 2024-04-17 23:23:25 · 675 阅读 · 0 评论 -
ReadWriteLock
在写入与读取的时候,会被其他线程插队,对于读取线程是不要紧的,但是对于读取线程,就会出现很多的问题。在以前我们可以synchronized ,ReetrentLock锁住。加入读写锁ReadWriteLock。原创 2024-04-17 23:22:10 · 251 阅读 · 0 评论 -
ReadWriteLock读写锁
在写入与读取的时候,会被其他线程插队,对于读取线程是不要紧的,但是对于读取线程,就会出现很多的问题。在以前我们可以synchronized ,ReetrentLock锁住。加入读写锁ReadWriteLock。原创 2024-04-16 22:58:21 · 482 阅读 · 0 评论 -
Semaphore
可以限制线程的使用次数。原创 2024-04-15 23:04:09 · 281 阅读 · 0 评论 -
CountDownLatch
如何使用CountDownLatch使得角色裁判,喊完各就位预备后,发枪,这个两个动作后,运动员才开始跑。倒计时锁存器,,,,count计数,down停止,Latch锁。需要使用callable接口,而不是runnable接口。运动员类【runner】裁判类 【Judge】原创 2024-04-15 23:03:30 · 354 阅读 · 0 评论 -
Callable接口
Thread只能传入Runnable接口的实现类,那么实现了callable接口该怎么办,才可以让线程启动。原创 2024-04-14 21:00:21 · 173 阅读 · 0 评论 -
HashMap与HashSet的不安全问题
HashMap 的底层实现基于哈希表(Hash Table)结构,并结合了 数组 和 链表 或红黑树。因为addIfAbsent这个类用来重入锁ReetrantLock,所以他可以实现同步,并发执行。当创建一个CopyOnwriteArraySet时,其实就是创建了一个ArrayList。看看CopyOnWriteArraySet的add方法。这是HashMap底层的数组【桶】与ArryList类似。原创 2024-04-14 20:57:18 · 941 阅读 · 0 评论 -
ArrayList中多线程的不安全问题
方案二:List list = Collections.synchronizedList(new ArrayList<>());写入时复制,就是在写入时,先将原数据复制,再将需要的数据插入,最后返回给原数组。多个线程同时去添加ArryList,出现了报错,抛出来异常。方案一:List list = new Vector();为什么可以这样输出,是一种函数是接口,我们先过个耳熟。因为synchronized是不高效的行为。ArrayList.add方法是不安全的。该方法使用了Lock锁,所以是安全的。原创 2024-04-10 22:48:24 · 684 阅读 · 0 评论 -
生产者与消费者的问题与进阶
它指的是线程可以在没有被明确通知、中断或超时的情况下被唤醒。这意味着即使在没有满足特定条件的情况下,线程也可能从等待状态中被唤醒,这种情况就被称为虚假唤醒当线程被虚假唤醒时,它可能会继续执行后续的代码,而这些代码可能依赖于某些尚未满足的条件。这可能导致程序的行为与预期不符,引发错误或异常为了处理虚假唤醒,应用程序通常需要采用一种策略来重新检查唤醒条件。这通常通过在。原创 2024-04-09 23:50:20 · 330 阅读 · 0 评论 -
多线程基础
线程start(),并不是启动了,而是将加入到就绪队列,是与主线程一起的呢,再有cpu分配资源实现多线程的方式存在两个类 ,实现Runnable接口,同时重写run方法Thread类也是实现了 Runnable接口。原创 2024-04-07 20:40:05 · 969 阅读 · 0 评论