Java SynDemo对象如何解决继承问题

开发 后端
Java SynDemo对象在不断的学习中一直有很多的问题出现。下面我们就看看如何才能更好的进行相关问题的解决。希望大家有所收获。

Java SynDemo对象刚一出现的时候有很多程序员都很头痛,其实这是完全没有必要的,下面我们就来详细的学习下有关的相关问题。我们发现,对于Java SynDemo对象,只有synMethord1运行了,而synMethord2却没有运行。

这是应为在方法级别的synchronized声明将lock这个类对象的当前实例。所以在synMethord1运行结束unlock之前,当前Java SynDemo对象实例是无法运行synMethord2的。这种方法级别的synchronized声明和以下的做法是等同的:

 

package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */  
public class SynDemo { public void synMethord1() { 
synchronized (this) { while (true) { try { Thread.sleep(1000); 
System.out.println("synMethord1"); } catch (InterruptedException 
e) { // TODO Auto-generated catch block  
e.printStackTrace();   }   }   }   }   public void synMethord2() { synchronized (this) { while (true) 
{ try { Thread.sleep(1000); System.out.println("synMethord2"); } 
catch (InterruptedException e) { // TODO Auto-generated catch block  
e.printStackTrace();   }   }   }   }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

 

运行程序,结果与上次相同。

如果我们希望分别同步2个方法该如何处理?可以参考这个实现:

 

package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */  
public class SynDemo { private Object flag1 = new Object();
 private Object 
flag2 = new Object(); public void synMethord1() 
{ synchronized (flag1) { while (true) { try { Thread.sleep(1000); 
System.out.println("synMethord1"); } catch (Interrupted
Exception e) { // TODO Auto-generated catch block  
e.printStackTrace();   }   }   }   }   public void synMethord2() { synchronized (flag2) { while (true) 
{ try { Thread.sleep(1000); System.out.println("synMethord2"); } 
catch (InterruptedException e) { // TODO Auto-generated catch block  
e.printStackTrace();   }   }   }   }  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

 

运行程序,结果如我们预期:

 

main   
synMethord2   
synMethord2   
main   
synMethord1   
main   
synMethord1   
synMethord2 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

 

 

关于Synchronized还有一些其他的话题,如static的问题,继承的问题,与volatile搭配使用等等,在网上都有很详细的说明,这里就不重复介绍了。 以上就是对Java SynDemo对象的详细介绍。

【编辑推荐】

  1. Java线程同步如何在不同线程中调用
  2. Java线程同步的优先级介绍
  3. Java线程返回值如何控制自己的未来
  4. Java线程通信源代码中的奥秘探究
  5. Java线程同步问题在实践中寻找答案
责任编辑:张浩 来源: 互联网
相关推荐

2012-09-05 11:09:15

SELinux操作系统

2010-03-18 14:46:18

Java SynDem

2011-05-17 13:22:50

SQL对象名无效

2009-02-05 10:33:27

设备碎片Java ME移动

2025-01-02 09:48:52

JVMCARD_元素

2009-07-06 17:50:13

Java JSP

2011-03-23 14:42:47

CPU过度消耗

2021-06-06 13:05:15

前端跨域CORS

2011-08-29 10:34:00

网络安全云安全云计算

2023-10-30 18:35:47

MySQL主从延时

2017-10-17 09:21:06

2010-07-16 13:52:26

telnet漏洞

2010-04-29 17:46:31

Oracle死锁

2010-03-11 18:09:33

Python正则表达式

2019-11-26 14:30:20

Spring循环依赖Java

2010-03-24 09:25:36

Nginx配置

2020-04-24 16:01:26

物联网数据IOT

2023-03-27 11:33:37

人工智能物联网

2017-08-02 15:51:24

PHP中文乱码

2010-08-25 13:06:53

IP地址故障
点赞
收藏

51CTO技术栈公众号