1. 为什么需要互斥:

​互斥操作  保证了  多线程操作的  原子性 ,

java的 互斥 语义 有 synchronized 关键字 提供.

主要方式 有  同步代码块 和  同步方法 两种

2. 整数自增操作

常见的线程安全问题:

  • 从内存中 读数据  到寄存器,<---进入一个线程

  • 从寄存器 +1

  • 写会内存

像这种不是一条指令就能完成的操作 ,并且 有多个线程操作统一资源的时候 ,要保证 上面 三步操作一次执行完,而不被其他线程干扰(原子性:要么  都不执行 ,要么 全部执行)

3. 线程的等待

Thread.join() ;:

java 中的 主线程  默认会 等待 其他线程的  结束

start() 的 作用是 启动 一个线程,  使得 调用处 的线程  流程 一分为二

而join() 方法 则 相反 ,.使得 两个执行流程 合二为一

4. 同步

同步就是  要保证 两个线程事件 执行的 时序关系

支持“同步”操作的调用叫做“同步原语”,包括:互斥、条件变量、信号量、信箱、事件标志和Spinlock等

  1. wait() 等待通知,该调用会阻塞当前线程。

  2. notify() 发出通知,如果有多个线程阻塞在该obj上,该调用会唤醒一个(阻塞)等待该obj的线程。

  3. notifyAll()发出通知,如果有多个线程阻塞在该obj上,该调用会唤醒所有(阻塞)等待该obj的线程。

5. 信号丢失

wait/notify/notifyAll提供了一种线程间事件通知的方式,但这种通知并不能被有效的“记住”;所以,就存在通知丢失(notify missing)的可能——发出通知的线程先notify,接收通知的线程后wait,此时这个事先发出的通知就会丢失。在POSIX规范上,叫做信号丢失;由于现在的多数操作系统(LINUX,Mac,Unix)都遵循POSIX;所以“信号丢失”这个词使用的更广泛。

6. 虚假唤醒

虚假唤醒(spurious wakeup)在采用条件等待时,我们使用的是

while(条件不满足){
condition_wait(cond, mutex);
}
而不是:
If( 条件不满足 ){
Condition_wait(cond,mutex);
}

这是因为可能会存在虚假唤醒”spurious wakeup”的情况。
也就是说,即使没有线程调用condition_signal, 原先调用condition_wait的函数也可能会返回。此时线程被唤醒了,但是条件并不满足,这个时候如果不对条件进行检查而往下执行,就可能会导致后续的处理出现错误。

最新文章

  1. 关闭Centos写磁盘功能
  2. [AC自动机]HDOJ3695 Computer Virus on Planet Pandora
  3. 关机相关(shutdown,reboot)
  4. hdu 4445
  5. qemu kvm 虚拟化
  6. zoj 1760 floyd构图+Dinic最大流
  7. sublime3配置及插件安装
  8. EasyUI 两个日期比较
  9. Hibernate持久化对象状态
  10. php数组和正则表达式的替换拆分匹配所有
  11. 从零开始学TensorFlow
  12. .net Core 2.0应用程序发布到IIS上注意事项
  13. hibernate多生成一个外键以及映射文件中含有&lt;list-index&gt;标签
  14. 解决忘记mysql中的root用户密码问题
  15. Linux或UNIX系统配置检查
  16. webstorm2017.3最新激活教程(激活码、注册码)亲测成功
  17. bash执行命令分别输出正常日志和错误日志
  18. 在WINDOWS上开发IOS应用的方法
  19. IBM BR10i阵列卡配置Raid0/Raid1(转)
  20. C++ IDE环境

热门文章

  1. [转]Delphi 关键字详解
  2. 利用xampp进行https操作
  3. URL加载系统----iOS工程师必须熟练掌握
  4. Xcode can&#39;t verify the identity of the server
  5. STM8S学习笔记-时钟控制1
  6. ES Head is not working with elasticsearch-1.4.0.Beta1
  7. Qt:截图工具,任意大小矩形截图、全屏截图
  8. org.quartz.utils.UpdateChecker Checking for available updated version of Quartz..
  9. BZOJ 1022 [SHOI2008]小约翰的游戏John
  10. Java---常用基础面试知识点