JAVA基础
文章平均质量分 60
记录java学习的点点滴滴
弥野月亮
人丑就得多读书。
展开
-
使用读写锁提高并发
我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待。原创 2023-05-08 23:18:36 · 579 阅读 · 1 评论 -
使用wait和notify进行多线程协调
synchronized解决了多线程竞争的问题。但是无法解决多线程协调的问题,多线程协调问题也就是多个线程执行不同的方法的问题,如果处理不当可能造成线程长期占用无法释放,造成资源浪费、JVM进程无限等待的后果。上面的代码,执行getTask时,持有的锁是this锁,如果队列为空则一直等待,一直无法释放锁,由于addTask在等待this锁,一直无法增加任务,则该队列一直为空。因此陷入了循环等待。原创 2023-05-04 11:56:31 · 64 阅读 · 0 评论 -
死锁及如何解决死锁
多线程各自持有不同的锁,并互相试图获取对方已持有的锁,导致无限等待。死锁发生后,没有任何机制能解除死锁,只能强制结束JVM进程。什么时候会释放锁:synchronized代码块结束之后才会释放由synchronized获取的锁。这种情况会造成死锁:线程1在试图获取线程2已经获取并未释放的锁。避免死锁的方法是多线程获取锁的顺序要一致。原创 2023-05-04 10:47:11 · 111 阅读 · 0 评论 -
线程同步synchronized
静态变量:在java中,静态变量指的是被static修饰的类的变量;静态变量被所有类实例对象所共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化。关键字需要对同一个实例加锁才能实现同步的作用,因此在初版代码中采用先生成一个SynchronizedCounter实例,再通过MySynchronizedAddThread、MySynchronizedDelThread构造函数初始化,使两个线程共享同一个实例。原创 2023-05-03 11:55:26 · 509 阅读 · 2 评论