一、同步的特性
1. 不必同步类中所有的方法, 类可以同时拥有同步和非同步方法.
2. 如果线程拥有同步和非同步方法, 则非同步方法可以被多个线程自由访问而不受锁的限制. 参见实验1:http://blog.csdn.net/huang_xw/article/details/7318561
3. 如果两个线程要执行一个类中的同步方法, 并且两个线程使用相同的实例来调用方法, 那么一次只能有一个线程能够执行方法, 另一个需要等待, 直到锁被释放. 参见实验2:http://blog.csdn.net/huang_xw/article/details/7318571
4. 如果两个线程要执行一个类中的不同同步方法, 并且两个线程使用相同的实例来调用方法, 那么一次只能有一个线程能够执行方法, 另一个需要等待, 直到锁被释放. 因为一个实例对象就一把锁. 参见实验3:http://blog.csdn.net/huang_xw/article/details/7318578
5. 不光是类实例, 每一个类也对应一把锁, 这样我们也可将类的静态成员函数声明为synchronized, 以控制其对类的静态成员变量的访问. 参见实验4: http://blog.csdn.net/huang_xw/article/details/7318588
二、synchronized的意义
synchronized用于多线程设计, 有了synchronized关键字, 多线程程序的运行结果将变得可以控制. synchronized关键字用于保护共享数据.
三、synchronized实现同步的机制
synchronized依靠"锁"机制进行多线程同步, "锁"有2种, 一种是对象锁, 一种是类锁.
四、synchronized关键字可以修饰的对象
1. synchronized{static方法 or 普通方法} 函数的修饰符, 就是同步方法.
2. synchronized{修饰代码块} 可作为函数内语句的修饰符, 就是同步语句块
3. synchronized{对象引用} 注意对象必须是线程安全的.(比如: StringBuffer在JDK1.5中是线程安全的, 而数组, ArrayList是不安全的). 参见实验5:http://blog.csdn.net/huang_xw/article/details/7318593
附: 解决线程不安全的方法: 
1. 如果对象是immutable, 则是线程安全的, 例如: String, 可以放心使用.
2. 如果对象是线程安全的, 例如: StringBuffer, 则放心使用.
3. 有条件线程安全, 对于Vector和Hashtable一般情况下是线程安全的, 但是对于某些特殊情况, 需要通过额外的synchronized保证线程安全.
4. 使用synchronized关键字.

转载于:https://www.cnblogs.com/barrywxx/p/4343117.html

Java多线程:线程同步与关键字synchronized相关推荐

  1. Java多线程的同步机制:synchronized

    如果程序是单线程的,就不必担心此线程在执行时被其他线程"打扰",就像在现实世界中,在一段时间内如果只能完成一件事情,不用担心做这件事情被其他事情打扰.但是,如果程序中同时使用多线程 ...

  2. Java 多线程 线程同步

    线程同步 1.发生在多个线程操作同一个资源 2.并发:同一个对象被多个线程同时操作 3.于是,就需要线程同步.线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等 ...

  3. Java多线程——线程同步

    1.不安全的买票 //不安全的买票//线程不安全,有负数或者多人买到同一张票 public class UnsafeBuyTicket {public static void main(String[ ...

  4. java线程同步——条件对象+synchronized 关键字

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java线程同步--条件对象+synchronized 关键字 的相关知识: 0.2)for ...

  5. Java多线程学习(二)synchronized关键字(1)

    转载请备注地址: https://blog.csdn.net/qq_34337272/article/details/79655194 Java多线程学习(二)将分为两篇文章介绍synchronize ...

  6. JAVA中线程同步的方法(7种)汇总

    JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...

  7. java多线程 线程安全_Java中的线程安全

    java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...

  8. Java 多线程线程安全(面试概念解答二)

    Java 多线程线程安全 什么是线程安全? 为什么有线程安全问题? 线程安全解决办法? 同步代码块 同步函数 静态同步函数 多线程死锁 多线程的三大特性 原子性 可见性 有序性 Java内存模型 Vo ...

  9. JAVA中线程同步的几种实现方法

    JAVA中线程同步的几种实现方法 一.synchronized同步的方法: 1.synchronized同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁, ...

  10. java多线程、同步、异步

    1.多线程.并发.异步.并行: 多线程是对cpu剩余劳动力的压榨,是一种技术.想想web server 需要处理大量并发请求的场景,是你同时给A,B,C...打电话(你的思维在不断切换,如一边给女朋友 ...

最新文章

  1. 网易云音乐TFBOYS线上演唱会破纪录,稳定线上体验如何实现?
  2. barrier相關知識點整理(还没搞完)
  3. 用PaddlePaddle(飞浆)实现车牌识别
  4. UDSonCAN资料收集
  5. IIS6与Tomcat6的整合方法
  6. Spring Cloud学习笔记---Spring Cloud Sleuth--一个手动搭建zipkin碰到的坑
  7. Java同步锁synchronized的最全总结
  8. 软件测评师的一些重点①
  9. 图文并茂带你了解成分句法分析
  10. 基于zookeeper的统一命名服务及实现
  11. 水晶易表 Xcelsius 2008 安装指南学习资源
  12. 土豆网王微:做自己生活的导演
  13. steam账号连接服务器遇到问题,无法预料的服务器浏览器反应 - Steam Support
  14. Hopfield 神经网络 笔记
  15. 中台战略-第四章、企业中台5大成功要素
  16. VS Code中打开工作区设置josn文件
  17. MaratonIME plays Cîrokime
  18. 微信公众号 微信服务号如何实现服务号点击消息跳转进入小程序
  19. 微信红包封面小程序源码-逢年过节非常火爆
  20. Acm程序设计学习第二周

热门文章

  1. 查看硬盘转速_【装机帮扶站】第538期:哪些CPU、板卡、硬盘对于普通消费者而言不太值得购买?...
  2. redis 多进程_Redis 持久化
  3. 【JavaWeb】IDEA中启动SpringBoot项目及解决相关报错问题
  4. 机器学习- 吴恩达Andrew Ng Week6 Regularized Linear Regression and Bias/Variance知识总结
  5. 返回信息是html的性能测试,Web前端性能测试小点
  6. validation 开始日期 结束日期_Spring Boot集成validation用于优雅的校验API参数的合法性...
  7. Chapter 1 : MySQL体系结构和搜索引擎
  8. CNN反向传播公式推导
  9. 编译原理完整学习笔记(二):高级程序设计语言
  10. Cobalt Strike参数详解