public synchronized void syzDemo(){ System.out.println(System.currentTimeMillis()); System.out.println("进入synchronized锁:syzDemo"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
public synchronized static void syzDemo1(){ System.out.println(System.currentTimeMillis()); System.out.println("进入synchronized锁:syzDemo1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
public synchronized void syzDemo2(){ synchronized (this){ System.out.println(System.currentTimeMillis()); System.out.println("进入synchronized锁:syzDemo2"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public synchronized void syzDemo3(){ synchronized (ExcelUtil.class){ System.out.println(System.currentTimeMillis()); System.out.println("进入synchronized锁:syzDemo3"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
public static void main(String[] args) { SyzDemo syzDemo = new SyzDemo(); SyzDemo syzDemo1 = new SyzDemo(); Thread thread = new Thread(()->{ syzDemo.syzDemo(); }); thread.start(); Thread thread1 = new Thread(()->{ syzDemo1.syzDemo(); }); thread1.start(); }
public static void main(String[] args) { SyzDemo syzDemo = new SyzDemo(); SyzDemo syzDemo1 = new SyzDemo(); Thread thread = new Thread(()->{ syzDemo.syzDemo(); }); thread.start(); Thread thread1 = new Thread(()->{ syzDemo.syzDemo(); }); thread1.start(); }
public static void main(String[] args) { SyzDemo syzDemo = new SyzDemo(); SyzDemo syzDemo1 = new SyzDemo(); Thread thread = new Thread(()->{ syzDemo.syzDemo1(); }); thread.start(); Thread thread1 = new Thread(()->{ syzDemo1.syzDemo1(); }); thread1.start(); }
解析:
在图1中thread1和thread分别调用syzDemo和syzDemo1对象中的syzDemo方法,因为两个线程调用是不同的对象的两个方法,所以不会互斥
在图2中thread1和thread都在调用syzDemo对象中的syzDemo方法,因为syzDemo方法加了synchronized
在图3中thread1和thread分别调用syzDemo和syzDemo1对象中的syzDemo1方法,但是因为syzDemo1方法属于静态方法,在类加载时就会加载到方法区,所以本质上两个线程都在调用同一个方法,于是产生了互斥
syzDemo2中与syzDemo相同:锁定的是当前实例的这一段代码,只有多个线程中调用的是同一个实例且执行到这一段代码时才会互斥,syzDemo3于syzDemo1相同:锁定的是当前类的这一段代码,只要多个线程共同执行这一段代码就会产生互斥
到此这篇关于Java多线程之synchronized关键字的使用的文章就介绍到这了,更多相关Java synchronized关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站