1、概述

      1.1  由于多线程之间共享父进程的资源,可以非常方便的共享数据,这才是多个线程通信的最好方式

            当然Java也提供了协调线程运行的支持;

      1.2  线程的执行具有随机性,在实际业务中,比如有2个线程:一个是取款者、一个是存款者,要求存款者、取款者不断执行存取操作,但是要求:存款者或者取款者不能连续执行操作,只能存款者存款后,取款者才能取款;

            需要借助Object类的wait()、notify()、notifyAll(),要求:这3个方法必须由    同步监视器对象    调用

                1.1.1  同步方法:

                      因为同步方法的同步监视器为this,可直接调用3个方法;

                1.1.2  同步代码块:

                      由同步监视器调用;

            wait()

                导致当前线程处于阻塞状态,直到其他线程调用该线程的同步监视器的notify(),才将该线程唤醒;

            notify()

                唤醒在此同步监视器上等待的单个线程,如果存在多个,则随机唤醒其中一个;

            notifyAll()

                唤醒在此同步监视器上等待的所有线程;

      1.3  如何实现线程通信

                前2种可以认为是  线程之间协同允许的控制策略;

                通常没有必要使用管道流进行线程之间通信,多个线程共享父进程的资源,这样的方式才是线程通信的最好方式

            1.2.1  使用synchronized实现的同步(同步代码块、同步方法):

                   使用同步监视器对象调用Object的3个方法实现;

            1.2.2  使用同步锁实现的同步

                   由于同步锁不存在同步监视器,也就不能使用Object的3个方法;

                   Java提供了一个Condition类的3个方法:await()、signal()、signalAll()

            1.2.3  使用管道流

最新文章

  1. loadrunner性能测试---添加windows多台压力机
  2. iOS 代理反向传值
  3. php-工厂模式(转)
  4. C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部【转载】
  5. Java设计模式--单列设计模式
  6. CSS3前缀
  7. HUNNU11342:Chemistry(模拟)
  8. Fuel 5.1安装openstack I版本号环境
  9. install font
  10. LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
  11. 学习Layui 第一天
  12. iis7 绑定多个ssl证书
  13. linux vg lv pv
  14. python 3.5 连接mysql数据库
  15. noip第15课资料
  16. 理解 Redis(6) - List 值
  17. Oracle存储过程和自定义函数笔记
  18. 【SPOJ METEORS】 Meteors
  19. mysql开发常用小结
  20. 【Java】PreparedStatement VS Statement

热门文章

  1. 理解Java构造器中的"this"
  2. Cytoscape软件简介
  3. 进程管理工具uptime,top,htop
  4. Codeforces 803E--Roma and Poker (DP)
  5. 10.14.1-linux设置时间等
  6. [CSP-S模拟测试]:回文串(hash+二分)
  7. flask 实现简易图书管理
  8. 抽象类 抽象方法 abstract
  9. Java基本数据类型内存分配
  10. c++全局变量,局部变量,内存布局,默认初始化