全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
synchronized的4种用法 1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方 法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入. 例如: public synchronized void synMethod() /方法体 2.对某一代码块使用,synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块.此时,线程获得的是成员锁.例如: public int synMethod(int a1) synchronized(a1) /一次只能有一个线程进入 3.synchronized后面括号里是一对象,此时,线程获得的是对象锁.例如: public class MyThread implements Runnable public static void main(String args) MyThread mt = new MyThread(); Thread t1 = new Thread(mt, t1); Thread t2 = new Thread(mt, t2); Thread t3 = new Thread(mt, t3); Thread t4 = new Thread(mt, t4); Thread t5 = new Thread(mt, t5); Thread t6 = new Thread(mt, t6); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); t6.start(); public void run() synchronized (this) System.out.println(Thread.currentThread().getName(); 对于3,如果线程进入,则得到当前对象锁,那么别的线程在该类所有对象上的任何操作都不能进行.在对象级使用锁通常是一种比较粗糙的方法。为什么要将整个 对象都上锁,而不允许其他线程短暂地使用对象中其他同步方法来访问共享资源?如果一个对象拥有多个资源,就不需要只为了让一个线程使用其中一部分资源,就 将所有线程都锁在外面。由于每个对象都有锁,可以如下所示使用虚拟对象来上锁: class FineGrainLock MyMemberClass x, y; Object xlock = new Object(), ylock = new Object(); public void foo() synchronized(xlock) /access x here /do something here - but dont use shared resources synchronized(ylock) /access y here public void bar() synchronized(this) /access both x and y here /do something here - but dont use shared resources 4.synchronized后面括号里是类,此时,线程获得的是对象锁.例如: class ArrayWithLockOrder private static long num_locks = 0; private long lock_order; private int arr; public ArrayWithLockOrder(int a) arr = a; synchronized(ArrayWithLockOrder.class) /-这里 num_locks+; / 锁数加 1。 lock_order = num_locks; / 为此对象实例设置唯一的 lock_order。 public long lockOrder() return lock_order; public int array() return arr; class SomeClass implements Runnable public int sumArrays(ArrayWithLockOrder a1, ArrayWithLockOrder a2) int value = 0; ArrayWithLockOrder first = a1; / 保留数组引用的一个 ArrayWithLockOrder last = a2; / 本地副本。 int size = a1.array().length; if (size = a2.array().length) if (a1.lockOrder() a2.lockOrder() / 确定并设置对象的锁定 / 顺序。 first = a2; last = a1; synchronized(first) / 按正确的顺序锁定对象。 synchronized(last) int arr1 = a1.array(); int arr2 = a2.array(); for (int i=0; isize; i+) value += arr1i + arr2i; return value; public void run
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院麻醉病历书写规范解读
- 建筑保温材料备案申请流程
- 物流运输安全管理及事故预防
- 小学语文口语表达教学活动设计
- 中学物理实验教学设计与创新方法
- 电子商务法律法规与风险控制
- 幼儿园课程设置与家校沟通指南
- 医疗用品采购合同范本及注意事项
- SD连锁股份有限公司财务分析报告
- 二年级语文多音字专项复习资料包
- 卧床老年人更换床单课件
- 后勤的题目及答案
- Unit1 Lesson2 What will I be课件(内嵌视频)冀教版(2024)八年级上册
- 实施指南《G B-T36483-2018悬索桥用主缆平行钢丝索股》实施指南
- GB/T 20805-2025饲料中酸性洗涤木质素(ADL)的测定
- 2025年信息安全行业投资趋势与盈利模式研究报告
- 小学数学期末成绩质量分析报告
- 2025-2026学年苏教版(2024)小学科学三年级上册(全册)课时练习及答案(附目录P102)
- 2024年BRCGS包装材料全球标准第7版全套管理手册及程序文件(可编辑)
- 2025年上海公务员考试(城市建设管理)历年参考题库含答案详解(5卷)
- 2026步步高六册同步物理必修2-第七章 2 万有引力定律
评论
0/150
提交评论