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

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

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

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

 

  1. package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */  
  2. 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  
  3. e.printStackTrace();  
  4. }  
  5. }  
  6. }  
  7. }  
  8. public void synMethord2() { synchronized (this) { while (true) 
    { try { Thread.sleep(1000); System.out.println("synMethord2"); } 
    catch (InterruptedException e) { // TODO Auto-generated catch block  
  9. e.printStackTrace();  
  10. }  
  11. }  
  12. }  
  13. }  

 

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

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

 

  1. package com.cnblogs.gpcuster;/** * * @author Aaron.Guo * */  
  2. 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  
  3. e.printStackTrace();  
  4. }  
  5. }  
  6. }  
  7. }  
  8. public void synMethord2() { synchronized (flag2) { while (true) 
    { try { Thread.sleep(1000); System.out.println("synMethord2"); } 
    catch (InterruptedException e) { // TODO Auto-generated catch block  
  9. e.printStackTrace();  
  10. }  
  11. }  
  12. }  
  13. }  

 

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

 

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

 

 

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

【编辑推荐】

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

2010-03-18 14:46:18

Java SynDem

2011-05-17 13:22:50

SQL对象名无效

2012-09-05 11:09:15

SELinux操作系统

2009-02-05 10:33:27

设备碎片Java ME移动

2010-04-29 17:46:31

Oracle死锁

2010-03-11 18:09:33

Python正则表达式

2009-07-06 17:50:13

Java JSP

2017-07-20 07:30:16

大数据数据互联网

2013-05-21 10:49:59

Windows硬件冲突

2011-08-29 10:34:00

网络安全云安全云计算

2021-06-06 13:05:15

前端跨域CORS

2011-03-23 14:42:47

CPU过度消耗

2017-10-17 09:21:06

2010-07-16 13:52:26

telnet漏洞

2023-10-30 18:35:47

MySQL主从延时

2009-09-21 17:10:14

struts Hibe

2011-09-05 13:32:56

2023-05-25 08:00:36

阿⾥云DNS重试机制

2021-10-20 20:27:55

MySQL死锁并发

2019-07-30 08:28:44

VirtualBox桥接网络
点赞
收藏

51CTO技术栈公众号