
JUC
文章平均质量分 83
java多线程专栏
G丶AEOM
我们都在追求更完美的自己!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
控制线程间顺序-CountDownLatch,CylicBarrier,Semaphore
有A,B.C三个线程,如何保证三个线程同时执行? 如何在并发情况下保证三个线程依次执行? 如何保证三个线程有序交错进行?简单来说:主要就是利用并发工具解决,通常有三个常用的并发工具:CountDownLatch,CylicBarrier,Semaphore原创 2024-11-13 17:30:00 · 794 阅读 · 0 评论 -
ThreadLocal,内存泄漏
我认为不恰当的使用ThreadLocal会造成内存泄漏的问题,我有查看过ThreadLocal源码,更加理解了这个问题,ThreadLocal内存是在一个静态内部类ThreadLocalMap,在存储对象后,value值实际存储在ThreadLocalMap中,源码中他是通过set,获得当前线程的ThreadLocalMap,往map中添加Key-Value,而Key是当前ThreadLocal实例,Value是我们传入的值。不过在使用ThreadLocal中,要注意正确使用,避免内存泄漏问题。原创 2024-10-16 17:30:00 · 386 阅读 · 0 评论 -
Volatile和Synchronized有什么区别?
Volatile 和 Synchronized 虽然都与多线程并发问题相关,但它们的功能特性、实现机制以及适用场景都有所不同,在实际的多开发中需要根据具体的需求和情况选择合适的关键字来保证程序的多线程安全。原创 2024-11-10 17:30:00 · 746 阅读 · 0 评论 -
Volatile能不能保证线程安全?
例如,在对象的初始化过程中,如果涉及到 Volatile 变量,能确保对象的初始化步骤按照正确的顺序执行,避免其他线程获取到未完全初始化的对象。例如,对于简单的状态标志共享场景,可以先使用 Volatile 保证标志的可见性,然后在具体的操作过程中(如根据标志执行一系列复杂操作)再使用 Synchronized 或原子类来保证操作的原子性和线程安全。原子性要求一个操作或一组操作作为一个整体执行,而对于一些常见的需要原子性的操作,如共享变量的自增、自减等操作,仅仅使用 Volatile 是不够的。原创 2024-11-13 17:30:00 · 524 阅读 · 0 评论 -
讲述一下多线程实现方法
多线程实现的各个方法原创 2024-03-23 07:00:00 · 339 阅读 · 1 评论 -
notify和notifyAll
- notify():只唤醒一个等待的线程,如果有多个线程在等待,那么被唤醒的线程是随机选择的。- notifyAll():唤醒在该对象监视器上等待的所有线程,但是这些被唤醒的线程仍然需要竞争锁,只有一个线程能够获取锁并继续执行。原创 2024-12-13 18:24:58 · 742 阅读 · 0 评论 -
java中await方法和wait方法区别
在 Java 中,await方法主要存在于与锁相关的Condition对象上,调用前需获取关联锁(如ReentrantLock),调用时释放锁进入等待,由同一Condition对象的notify或notifyAll唤醒;wait方法属于Object类,调用前要先获取对象内置锁(通过synchronized修饰获取),调用后释放该内置锁等待,由同一对象的notify或notifyAll唤醒。二者在锁处理、唤醒机制、适用场景等方面存在明显区别,编程时需按需选用。原创 2024-11-14 17:54:41 · 1314 阅读 · 0 评论 -
你真的理解wait()和sleep()吗
都会进入阻塞状态,wait方法,直接释放锁,也就是对象的监视器,等待被唤醒,需要同Synchronized配合使用,sleep方法,不释放锁,等一定时间。wait 和 sleep 是否会触发锁的释放以及 CPU 资源的释放为什么 wait() 方法不定义在 Thread 中?sleep() 方法为何定义在 Thread 类?线程的 sleep()方法和 yield()方法有什么区别?原创 2024-12-13 18:25:51 · 868 阅读 · 0 评论 -
多线程-线程各个方法
Object 类中的 notify() 方法,唤醒在此对象监视器上等待的单个线程(具体哪个线程看线程调度机制),如果所有线程都在此对象上等待,则会选择唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,线程通过调用其中一个 wait() 方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争。中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位。原创 2024-03-24 23:13:07 · 736 阅读 · 2 评论 -
一篇真正搞懂底层JAVA线程锁机制!!!
1、JAVA的锁就是在对象的Markword中记录一个锁状态。无锁,偏向锁,轻量级锁,重量级锁对应不同的锁状态。2、JAVA的锁机制就是根据资源竞争的激烈程度不断进行锁升级的过程3、整个升级过程,主要就是new对象后,若开启了偏向锁,获得偏向锁,轻度竞争就升级为轻量级锁,重度竞争(耗时过长,wait()等)就从轻量级锁变到重量级锁,或直接从偏向锁变到重量级锁。而JVM默认不打开偏向锁,对默认开启偏向锁的时间为4秒,比如让主线程休眠4s以上,后面创建的对象就会转换成偏向锁。不开启偏向锁,就变成原创 2024-11-11 17:45:00 · 840 阅读 · 0 评论