- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java线程同步Synchronized全解
线程同步Synchronized synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。 无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。 每个对象只有一个锁(lock)与之相关联 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 synchronized关键字同步方法 synchronized关键字同步实例方法: public synchronized void 方法名(){…} 作用域:某个对象实例内,可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。注意,不同的对象实例的 synchronized方法是不相干扰的。 synchronized关键字同步方法 synchronized关键字同步静态方法: synchronized static 静态方法名{…} 作用域:某个类的范围,防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。 注意 synchronized关键字不能继承。 在定义接口方法时不能使用synchronized关键字。 构造方法不能使用synchronized关键字(synchronized块来进行同步)。 Synchronized的位置 不能放在方法返回类型的后面 在非静态方法中,synchronized还可以放在方法定义的最前面,在静态方法中,synchronized可以放在static的前面 虽然使用synchronized关键字同步方法是最安全的同步方式,但大量使用synchronized关键字会造成不必要的资源消耗以及性能损失。虽然从表面上看synchronized锁定的是一个方法,但实际上synchronized锁定的是一个类。 静态方法和非静态方法的情况类似,但静态和非静态方法不会互相影响。 Synchronized块 synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。 synchronized块的语法如下: Synchronized块同步非静态类方法 需要使用this做为synchronized块的参数传入synchronized块,作用域是当前对象。 在使用synchronized块时要想达到和synchronized关键字同样的效果,必须将所有的代码都写在synchronized块中,否则,将无法使当前方法中的所有代码和其他的方法同步。 这时锁就是对象,谁拿到这个锁谁就可以运行它所控制的那段代码。 Synchronized块 注意锁定的资源 若锁定的资源不正确,则线程不安全 。 注意锁定的范围 锁定的范围过大,则效率降低; 锁定的范围过小,则出现线程不安全现象。 * * 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。 每个对象都有一个锁标志,当一个线程访问该对象时,被Synchronized修饰的数据将被“上锁”,阻止其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。 synchronized关键字同步方法 public synchronized void method(); synchronized public void method(); public static synchronized void method(); public synchronized static void method(); synchronized public static void method(); public void synchronized method(); //不正确 public static void synchronized method(); //不正确 public synchronized int n = 0; //不正确 public static synchronized int n = 0; //不正确 synchronized关键字只能用来同步方法,不能用来同步类变量 public v
您可能关注的文档
最近下载
- americanculture小学英语美国文化专题.pptx VIP
- 中国珠宝首饰传统文化 夏商周 中国古代夏商周(商)首饰种类2.pptx VIP
- 大学生科技创新课程之中美青年创客大赛(西南交通大学)中国大学MOOC 慕课 章节测验 期末考试答案.docx VIP
- 中国珠宝首饰传统文化 夏商周 中国古代夏商周(夏)首饰种类1.pptx VIP
- 【课程思政案例】《机械设计基础》.docx VIP
- 2025中级注册安全工程师《安全生产技术基础》考前密训10页纸.docx VIP
- 科研伦理与学术规范期末考试答案.docx VIP
- 检验科重点专科汇报.pptx VIP
- 重大社2024《财务实训教程—智能财务共享》教学课件-费用共享.pptx VIP
- AmericanCulture.ppt VIP
文档评论(0)