黑马程序员技术交流社区
标题:
java 线程锁synchronized应用技巧
[打印本页]
作者:
欧阳超
时间:
2011-10-5 22:55
标题:
java 线程锁synchronized应用技巧
谁来解释一下
作者:
匿名
时间:
2011-10-5 23:18
同步的原理:
其实就是使用锁机制。
将多条操作共享资源的代码进行同步的封装,并加了锁。
只有获取到锁线程才可以进入到同步中,这时其他线程即使获取到执行权。
因为没有了锁,它们都进不来。这样就保证了数据的安全。解决了线程安全问题。
什么代码需要定义到同步中呢?
只有操作了共享数据的多条代码才放到同步中。
同步的好处:解决了线程安全问题。
同步的弊端:对资源是一种耗费,相对降低效率。
同步的前提:
1,必须是两个或者两个以上的线程才需要同步。
2,多个线程必须使用同一个锁,才可以成为这些线程被同步了。
解决思想:在一个时间段,对于多条执行共享资源的语句,必须由一个线程执行完。
在执行过程中,其他线程不可以参与。
总结:造成安全隐患的因素
1,多个线程在操作共享资源。
2,有多条操作共享资源的代码。
作者:
盖保宁
时间:
2011-10-6 12:02
就是实现代码块的原子操作了 我是这么理解的 通过synchronized可以使 两个函数互斥访问临界资源
作者:
zhousaowen
时间:
2011-10-6 12:22
本帖最后由 zhousaowen 于 2011-10-6 12:29 编辑
一个线程能否进入已有线程的方法分几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。
synchronized使用地方及其使用的对象:
内部代码对象可以为this或者其他的对象:
public void code(){
Synchronized(this){}
}
在静态方法中的对象为字节码
public static synchroinized void code(){//xxxclass.class
}
在方法对象为this
public synchronized void code(){
}
作者:
刘朋朋
时间:
2011-10-6 17:47
一个线程能否进入已有线程的方法分几种情况:
分几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。
作者:
王家虎
时间:
2011-10-6 23:28
synchronized表示的就是锁。当一个方法上有synchronized时就表示这个方法在被一个线程执行时被锁上了,此时若其他线程也来执行这个方法,那么它看见这个方法被“上锁”了,自己就进不去了。只有当那个在执行这个方法线程“办完了事情”之后把锁打开自己出来后在等待的线程才可以进入这个方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2