当前位置: 编程技术>移动开发
本页文章导读:
▪java中的lock跟synchronized区别 java中的lock和synchronized区别
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁.........
▪ Spring学习1 Spring学习一
spring bean注入默认单例,action时最好不要使用全局变量,全局变量记录值,特别是web应用中所有用户使用一个单例,除非你每个方法都给所有全局变量赋值或者清空,否则极有可.........
▪ UIView CALayer 属性不显示异常 Property cannot be found in forward class object 'CALayer UIView CALayer 属性不显示错误 Property cannot be found in forward class object 'CALayer
#import <QuartzCore/CALayer.h>。
......
[1]java中的lock跟synchronized区别
来源: 互联网 发布时间: 2014-02-18
java中的lock和synchronized区别
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
[2] Spring学习1
来源: 互联网 发布时间: 2014-02-18
Spring学习一
spring bean注入默认单例,action时最好不要使用全局变量,全局变量记录值,特别是web应用中所有用户使用一个单例,除非你每个方法都给所有全局变量赋值或者清空,否则极有可能用用户信息混乱,当然也可以修改bean配置。
scope:
singleton单例
Property每次都new新对象
request
ApplicationContext
session
global session
一般都用前两个
使用request session global session的时候要在web.xml里配置
[3] UIView CALayer 属性不显示异常 Property cannot be found in forward class object 'CALayer
来源: 互联网 发布时间: 2014-02-18
UIView CALayer 属性不显示错误 Property cannot be found in forward class object 'CALayer
sdk版本升级到5.1,在项目中设置view的layer属性时,会发生错误,"Property 'c' cannot be found in forward class object 'CALayer *",这时需要引入
#import <QuartzCore/CALayer.h>。
在以前的sdk版本中,不需要引入就可以设置layer的属性,但是到了5.1,不引入就会编译通不过了。
最新技术文章: