



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川导游证试题及答案
- 2024年北京市中小学生航天知识竞赛题库及答案(初中版)
- 1.6 Microsoft Visual C++ 2010学习版介绍教学设计-2025-2026学年中职信息技术(信息科技)编程语言基础-C语言(第5版)高教版
- 2025年道路运输安全员证考试题库及答案主要负责人
- Unit 8 Food in Hangzhou说课稿-2025-2026学年小学英语Grade 1 BEnglish for KIDS
- 2025年高压电工证考试习题及答案
- 3.5.1人体内激素调节说课稿-2023-2024学年济南版生物七年级下册
- 红叶营销方案
- 企业咨询提成方案模板
- 标准的施工方案模板下载
- 放射性皮肤损伤的护理-中华护理学会团体标准
- 高中数学大题各题型答题模板+必背公式
- 2024年秋新人教版七年级上册历史教学课件 第8课 夏商周时期的科技与文化
- 自考08257《舆论学》备考试题库(含答案)
- 高考生物必修2遗传与进化知识点填空(每天打卡)
- 20G520-1-2钢吊车梁(6m-9m)2020年合订本
- 装饰装修工程监理细则
- 某地区地质灾害-崩塌勘查报告
- 我的家乡德州夏津宣传介绍模板
- 基于人工智能的个性化学习路径设计
- 关于节后复工复产方案
评论
0/150
提交评论