当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

2种使用方法

Synchronized method()

synchronized(this){/*区块*/},它的作用域是当前对象(只对同一个对象的多线程起作用);

注意:1  Synchronized只对同一个对象的多线程起作用,同一个类不同的对象实例的synchronized方法是不相干扰的

2 Synchronized static Method{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。

考虑情况

在多线程程序中,应当尽量使用线程安全的集合。在集合的修改和查询过程中往往涉及到很多复杂的操作。比如set集合,在添加或删除元素时,需要对其中的树结构进行调整,一般需要在log(n)时间内才能完成,这样如果两个线程同时对同一个集合进行修改,就很可能造成这个集合的崩溃。可以使用读写锁来对集合的修改加以控制,但是这种控制往往是复杂的,并且低效。因此java提供了一些线程安全的集合类,在多线程程序中可以使用这些线程安全的集合以避免可能的不一致和崩溃现象。

线程安全的集合主要包括:ConcurrentLinkedQueue、ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet等,相关内容请到java.util.concurrent包中进行查询。

List
ArrayList ,LinkedList不同步   Vector同步
ArrayList 如果要同步的话 List list = Collections.synchronizedList(new ArrayList(...));  参考api
Set

HashSet,LinkedHashSet不同步

Map
HashMap 不同步   HashTable 同步
Quque
LinkedBlockingQueue 同步
如果要同步非同步的集合 

Collection c=Collections.synchronizedCollection(new ArrayList());
 List list=Collections.synchronizedList(new ArrayList());
 Set s=Collections.synchronizedSet(new HashSet());
 Map m=Collections.synchronizedMap(new HashMap());

参考api

转载于:https://www.cnblogs.com/4wei/archive/2012/12/13/2847285.html

Synchronized同步的考虑相关推荐

  1. java基础提升篇:synchronized同步块和volatile同步变量

    初遇 Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低 ...

  2. synchronized同步块和volatile同步变量

    Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而 ...

  3. 关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考

    目录 我的难点 sychronizedList方法无法解决List遍历时线程不安全问题 sychronizd同步块为什么可以解决List遍历时线程不安全问题 我的思考过程 我的难点 sychroniz ...

  4. java 同步锁_Java多线程:synchronized同步锁的使用和实现原理

    作用和用法 在多线程对共享资源进行并发访问方面,JDK提供了synchronized关键字来进行线程同步,实现多线程并发访问的线程安全.synchronized的作用主要体现在三个方面:(1)确保线程 ...

  5. zbb20180913 java synchronized同步静态方法和同步非静态方法的异同

    java synchronized同步静态方法和同步非静态方法的异同 所有的非静态同步方法用的都是同一把锁--实例对象本身,也就是说如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步 ...

  6. 四、java多线程核心技术——synchronized同步方法与synchronized同步快

    一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变 ...

  7. Synchronized同步锁

    导致线程安全的问题在于,存在多个线程2同时操作一个共享资源,需要解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在 ...

  8. java中synchronized同步锁实现生产者消费者模式

    synchronized介绍 一.基本概念 synchronized关键字是java里面用来在多线程环境下保证线程安全的同步锁:java里面有对象锁和类锁,对象锁是用在对象实例的方法上或者一个对象实例 ...

  9. JAVA 的wait(), notify()与synchronized同步机制

    转自:http://blog.csdn.net/zyplus/article/details/6672775 在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的进程同步是通过syn ...

最新文章

  1. 让PHP更快的提供文件下载 【转】
  2. php 使用css乱码,分享CSS字符编码引起乱码快速解决的方法
  3. 【GNN】2022年最新3篇GNN领域综述!
  4. YOLOv3最全复现代码合集(含PyTorch/TensorFlow和Keras等)
  5. python3 log_Python3 log10()函数简单用法
  6. 当 AI 足够聪明时,我们的验证码还有用吗?
  7. HTTP消息中Header头部信息整理
  8. ios 旋转屏幕试图切换_iOS增强现实应用(AR)设计指南(上)
  9. win下php的memcached的安装与使用
  10. 网站解析 选择 主记录www 为主站 记录类型都选A 泛解析 选*就好了
  11. 实用防火墙(Iptables)脚本分析
  12. 谈谈计算机专业职业技能,计算机专业职业技能论文
  13. 安卓最好的流量防火墙—Droidwall
  14. docker配置阿里云镜像加速器
  15. win10运行命令大全
  16. 婚宴座位图html5,婚宴座位安排图 婚宴主桌安排示意图
  17. System.DateUtils Simple trimming functions部分
  18. 手机墙刷APP下载量骗推广费 10人因涉嫌合同诈骗被捕
  19. HIT 软件构造 lab2
  20. idea如何查看已安装的插件

热门文章

  1. 营销型网站吸引用户说难也难,说简单也简单
  2. html jsf ajax blur,JSF和AJAX:隐藏网站的一部分,直到第一个Ajax请求
  3. 轨迹分析_单细胞轨迹分析知多少拟时间分析比较
  4. CC控制服务的设计和侦测方法综述——DDoS攻击,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。...
  5. go语言笔记——多值函数,本质上和nodejs的回调很像,不过nodejs是回调的第一个参数是err,而golang里是第二个!...
  6. Python数据结构与算法—队列
  7. zipkin+rabbitMQ+elasticsearch实现
  8. Python课堂:判定IP地址合法性的三种方法
  9. Python--32 模块 包
  10. 微软家浏览器挺有意思,大家体会一下