synchronized

网友投稿 756 2022-10-25

synchronized

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小时内删除侵权内容。

上一篇:数字内容小程序化,助力破解基金营销困局
下一篇:小程序技术助力智慧医疗,小程序容器高度适配场景
相关文章

 发表评论

暂时没有评论,来抢沙发吧~