A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨静 中级黑马   /  2012-10-20 10:28  /  1322 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

并发模式在解决线程冲突问题的时候,一般采用序列化访问资源的方案。这意味着在给定时刻只允许一个任务访问共享资源。通常是通过在代码前面加上一条锁语句来实现的。这就使得在一段时间内只有一个任务可以运行这段代码
关键字synchronized为防止资源冲突提供了内置支持。当任务要执行被synchronized关键字保护的代码段时,它将检查锁是否可用,然后获取锁,执行代码,释放锁。
要控制对共享资源的访问,得先把它包装进一个对象,然后把所有要访问这个资源的方法都标记为synchronized。如果某个任务处于一个对标记为synchronized的方法的调用中,那么在这个线程从该方法返回之前,其它所有要调用这个类中任何标记为synchronized方法的线程都会被阻塞。所有对象都自动地含有单一的锁(监视器)。当在对象上调用任意synchronized方法时,此对象被加锁,这时该对象上的其他synchronized方法只有等到前一个方法调用完毕并释放了锁之后才能被调用。即对某个特定对象而言,其所有的synchronized方法共享一个锁,这可以被用来防止多个任务同时访问被编码对象内存。
在使用并发时将域设置为private是非常重要的,否则synchronized就不能防止其他任务直接访问域,这样就会产生冲突。如果在你的类中有超过一个方法在处理临界数据,那么你必须同步所有相关方法。如果只同步一个方法,其他方法就会随意地忽略这个对象锁,并可以在无任何惩罚的情况下被调用:即每个访问临界共享资源的方法都必须被同步,否则不能正确地工作。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马