轻量级前端框架助力开发者提升项目效率与性能
756
2022-10-25
synchronized
synchronized
解决避免临界区的竞态条件的发生,$synchronized$即俗称的对象锁,它采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其他线程想要再获取这个对象锁时就会阻塞住,这样就能保证拥有锁的线程可以安全的执行临界区的代码。。
代码
@Slf4j(topic = "c.Test11") public class Test11 { static int count = 0; static final Object lock = new Object(); public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { for (int i = 0; i < 5000; i ++) { synchronized (lock) { count ++; } } }); Thread t2 = new Thread(() -> { for (int i = 0; i < 5000; i ++) { synchronized (lock) { count --; } } }); t1.start(); t2.start(); t1.join(); t2.join(); log.debug("count的值是 {}", count); } }
做面向对象的改进
@Slf4j(topic = "c.Test11") public class Test11 { public static void main(String[] args) throws InterruptedException { Room r = new Room(); Thread t1 = new Thread(() -> { for (int i = 0; i < 5000; i ++) { r.increase(); } }); Thread t2 = new Thread(() -> { for (int i = 0; i < 5000; i ++) { r.decrease(); } }); t1.start(); t2.start(); t1.join(); t2.join(); log.debug("count的值是 {}", r.getCount()); } } class Room { private int count = 0; public void increase() { synchronized (this) { count ++; } } public void decrease() { synchronized (this) { count --; } } public int getCount() { return count; } }
加在方法上
class Test { public synchronized void test() {} } //等价于 class Test { public void test() { synchronized (this) { } } } class Test { public synchronized static void test() {} } //等价于 class Test { public void test() { synchronized (Test.this) { } } }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~