Java并发编程
介绍与总结Java并发编程相关内容
chuyufengling
这个作者很懒,什么都没留下…
展开
-
分布式锁实现方式
此外,通过监听机制,能够有效减少客户端的轮询,提高锁的获取效率。然而,需要注意的是,频繁地在ZooKeeper上创建和删除节点可能会对其性能造成影响,因此,在设计分布式锁方案时,需要考虑到这一点。一旦前面的节点(即客户端监听的节点)被删除(通常是因为持有锁的客户端完成任务并释放了锁),ZooKeeper会通知该客户端,客户端再次判断自己是否为最小节点,如果是,则获取锁;如果不是,它就找到比自己序号小的最近的那个节点,然后在该节点上注册一个监听器(watcher),等待这个节点被删除。原创 2024-03-31 20:49:40 · 1190 阅读 · 1 评论 -
多线程轮流打印a,b,c
在这个示例中,我们使用了ReentrantLock和Condition来实现线程之间的协作。每个线程在打印自己的字符后,会唤醒下一个线程,并等待自己的下一个轮次。通过这种方式,三个线程可以轮流打印出"abcabcabc..."这样的字符串。原创 2024-01-07 20:55:33 · 447 阅读 · 0 评论 -
happens before 和 as if serial
happens-before关系可以通过一些规则来确定,比如对volatile变量的写操作 happens-before 后续对该变量的读操作,对锁的释放操作 happens-before 后续对该锁的获取操作等。是指两个操作之间的顺序关系。如果操作A happens-before操作B,那么操作A的结果将对操作B可见,即操作B将看到操作A的影响。然而,对于多线程程序,开发者需要意识到虚拟机的重排序和优化可能会影响多线程程序的正确性,需要使用同步机制和内存屏障来确保多线程程序的正确执行。原创 2024-01-06 18:50:24 · 473 阅读 · 0 评论 -
Volatile关键字原理
volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence)对 volatile 变量的写指令后会加入写屏障,写屏障保证在该屏障之前,对共享变量的改动都存到主存中。对 volatile 变量的读指令前会加入读屏障,读屏障(lfence)保证在该屏障之后,对共享变量的读取,加载的是主存中最新数据。原创 2024-01-06 14:35:14 · 382 阅读 · 0 评论 -
CountDownLatch,Semaphore,CyclicBarrier使用案例
总的来说,CountDownLatch用于等待其他线程的完成,Semaphore用于控制并发线程数量,CyclicBarrier用于多阶段任务的协作。原创 2024-01-02 12:11:38 · 504 阅读 · 0 评论 -
Java并发编程知识点总结
多个线程同时阻塞,互相等待对象释放资源。原创 2023-12-02 15:46:08 · 849 阅读 · 0 评论 -
ReentrantLock
ReentrantLock是可中断锁,而synchronized 不是可中断锁。ReentrantLock可以获取到锁状态的。例如:线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定。原创 2023-06-10 22:13:56 · 115 阅读 · 0 评论 -
Semaphore使用acquire和tryAcquire方法案例
【代码】Semaphore使用acquire和tryAcquire方法案例。原创 2023-11-19 11:31:54 · 440 阅读 · 0 评论 -
ReentrantLock实现公平锁,可中断,条件变量,可重入案例
【代码】ReentrantLock实现公平锁,可中断,条件变量,可重入案例。原创 2023-11-18 11:34:40 · 229 阅读 · 0 评论 -
Monitor 原理
每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。原创 2023-11-21 11:26:28 · 93 阅读 · 0 评论 -
wait和notify使用案例
【代码】wait和notify使用案例。原创 2023-11-21 11:34:39 · 66 阅读 · 0 评论 -
synchronized锁膨胀过程
使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以 使用轻量级锁来优化。原创 2023-11-21 10:09:19 · 311 阅读 · 1 评论 -
ReentranReadWriteLock 使用案例
【代码】ReentranReadWriteLock 使用案例。原创 2023-11-20 11:05:16 · 91 阅读 · 0 评论 -
join方法使用案例
【代码】join方法使用案例。原创 2023-11-21 11:28:02 · 52 阅读 · 0 评论 -
Java创建线程池的几种方式
本例输出结果为持续输出,这里只截取一部分输出结果。Executor工具列创建线程方法。原创 2023-11-22 11:30:50 · 482 阅读 · 0 评论