线程同步,对象级别的锁和类级别的锁

同步指的是多线程情况,一个线程块在一定时间内只能在一个线程内执行。Java支持多线程执行,这就可能会导致两个或者多个线程访问同一个区域或者代码。同步是一个让所有并发的线程同步执行的过程。同步避免由共享内存不一致导致的内存错误,当一个方法被声明为同步的时候,线程保存着那个方法对象的监控,如果另一个线程正在执行这个同步方法,那么你的线程将会堵塞直到那个线程释放这个监控。

在java中同步由synchronized关键字实现的,你可以在你类中的方法或者块上使用synchronized关键字,关键字不能在类定义的变量或者属性上使用。

对象级别的锁

对象级别的锁是:只允许一个线程在类的实例上执行同步非静态方法或者非静态的代码块的一种机制这样做可以实例级别的数据线程安全。可以参看下边的代码:
[java]  view plain  copy
  1. public class DemoClass  
  2. {  
  3.     public synchronized void demoMethod(){}  
  4. }  
  5.    
  6. or  
  7.    
  8. public class DemoClass  
  9. {  
  10.     public void demoMethod(){  
  11.         synchronized (this)  
  12.         {  
  13.             //other thread safe code  
  14.         }  
  15.     }  
  16. }  
  17.    
  18. or  
  19.    
  20. public class DemoClass  
  21. {  
  22.     private final Object lock = new Object();  
  23.     public void demoMethod(){  
  24.         synchronized (lock)  
  25.         {  
  26.             //other thread safe code  
  27.         }  
  28.     }  
  29. }  

类级别的锁

类级别的锁不允许多线程进入运行时的类的任何实例的同步块。这意味着在运行时有100个DemoClass的实例,然后有一个线程执行demoMethod()方法,那么其他线程的其他实例都会被阻塞,这样做可以使静态数据线程安全。
[java]  view plain  copy
  1. public class DemoClass  
  2. {  
  3.     public synchronized static void demoMethod(){}  
  4. }  
  5.    
  6. or  
  7.    
  8. public class DemoClass  
  9. {  
  10.     public void demoMethod(){  
  11.         synchronized (DemoClass.class)  
  12.         {  
  13.             //other thread safe code  
  14.         }  
  15.     }  
  16. }  
  17.    
  18. or  
  19.    
  20. public class DemoClass  
  21. {  
  22.     private final static Object lock = new Object();  
  23.     public void demoMethod(){  
  24.         synchronized (lock)  
  25.         {  
  26.             //other thread safe code  
  27.         }  
  28.     }  
  29. }  

一些重要的提示

1、java中的同步保证没有两个线程可以一个同步方法,这需要同样的并发或者同步锁
2、synchronized关键字可以用在方法和代码块上。这些方法或者代码块可以使静态的也可以是非静态的。
3、当一个线程进入到java同步方法或者是代码块中,它需要一个锁,当离开的时候释放这个锁。同步方法的执行完毕、任何错误或者异常都会导致锁的释放。
4、java的synchronized关键字具有重进特性,这意味着,如果一个java同步方法调用了另一个同步方法,而这个方法需要同样的锁,那么当前有锁的线程可以直接进入方法而不需要锁。
5、java同步会在java对象中同步块为空的情况下抛出空指针异常。例如,在上边的例子中如果锁初始时为空,这个同步块将会抛出空指针异常
6、java中的同步方法会增加你程序的性能的消耗,所以只有在正真需要的时候才使用同步。同样,使用同步代码块的地方是你代码中关键的地方。
7、静态同步和非静态同步方法可以同步或并行的运行,因为他们的锁是在不同的对象上的。
8、根据java语言的规定,你不能在构造方法上使用synchronized关键字,这是非法的并且会导致编译错误

原文地址:http://howtodoinjava.com/2013/03/08/thread-synchronization-object-level-locking-and-class-level-locking/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值