------- android培训、java培训、期待与您交流! ----------
1.线程通讯概述
- 多个线程同时操作一个资源时,但是操作的动作不同,就涉及线程间通讯。
- 例如,一个Input线程存入Res共享数据,一个Output线程取出数据。
2.实现步骤
- 首先,要有操作的资源Res。
- 再就是要有多个操作线程,如存入线程Input,取出线程Output。
- 两个线程同时操作资源,为了避免多线程安全,需要同步。
- 同步时需要加锁,因为线程操作不同,需要建立两个线程类。两个线程类加同一个锁,这个锁需要是唯一的对象Res,字节码文件对象也勉强可以。
3.等待唤醒机制。
- 怎样解决?
- 步骤:
- 定义一个标志,作用是告诉另一个线程这个资源操作完了没有、我用完以后你才可以操作了。
- 例如:有两个线程,一个存Input,一个取Output,还有一个资源Res。需要存完一个才能取一个,存取线程都需要 同步,持有同一个锁Res。是不是可以存取需要判断一个标记flag(默认false数据为空),可以存是false(里面没有数据),可以取是true(里面有数据)。存的时候首先判断标记,false无数据就开始存,存完以后把标记改为true,然后唤醒notify()另一个线程;如果存的时候标记为true里面有数据,则wait()(等待)。取线程动作相反。注意:这里的wait(),notify()只能用在同步中,必须标示出线程所属的锁(这里是资源Res),并且wait()是定义在Object中的方法还抛了异常,这里不能抛只能try...catch处理。
- 注意:
- wait();
- notify();
- notifyAll();
- 都是用在同步中,因为要对持有监视器(锁)的线程操作。只有同步才具有锁。
- 为什么这些操作线程的方法要定义在Object类中呢?
- 因为这些方法在操作同步中线程时,都必须要标示他们出操作线程只有的锁。
- 只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒。
- 不可以对不同锁中的县城进行唤醒。
- 也就是说:等待和唤醒必须是同一个锁。
- 而锁可以是任意对象,所以可以被任意对象调用的方法定义在Object类中。
- 代码优化
- 资源一般需要私有化,并且提供一些方法set、get访问资源。set、get方法中包含多行代码也需要同步,这里方法同步就可以。这里面开头定义flag判断,结束定义flag和notify。这样做的好处是存取线程不需要再定义flag、wait、notify了。
分享到:
相关推荐
day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流 day10_缓冲流、转换流、序列化流、Files day11_网络编程 day12_函数式接口 day13_Stream...
NULL 博文链接:https://huangminwen.iteye.com/blog/1157983
---【课时12】12-进程内线程通讯实现(手写阻塞式队列).mp4 ---【课时2】02-如何理解线程安全与不安全.mp4 ---【课时3】03-导致线程不安全的因素.mp4 ---【课时4】04-如何保证线程安全.mp4 ---【课时5】05-...
1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...
4.客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。各类型客户在其...
java.util.concurrent-多线程框架
c++ 多线程编程之三 线程间通讯 后面还有四哦
java基础--11.多线程-1
【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip
多线程实例源码11.rar多线程实例源码11.rar多线程实例源码11.rar多线程实例源码11.rar多线程实例源码11.rar
2-5多线程.pdf 2-6网络编程.pdf 3-1ARM程序设计.pdf 3-2ARM综合实验.pdf 下面的为第二部分课件。 4-1内核开发1.pdf 4-2内核开发2.pdf 4-3内核开发3.pdf 4-4系统构建.pdf 4-5UBOOT.pdf 5-1设备驱动-1.pdf 5-2设备驱动...
【IT十八掌徐培成】Java基础第09天-01.多线程-时间片-死锁演示.zip
【IT十八掌徐培成】Java基础第08天-04.多线程-生产者-消费者.zip
【IT十八掌徐培成】Java基础第08天-01.多线程-yield.zip
【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip
【IT十八掌徐培成】Java基础第08天-03.多线程-同步代码块-同步方法.zip
【IT十八掌徐培成】Java基础第09天-004.多线程-状态机变换.zip
包含非常丰富的Java知识点和海量面试题,整理自“程序员乔戈里”,感谢原作者的辛苦付出,本资源作为搬运,是因为原作者的链接无法访问了,自己通过一些手段辛苦下载下来,希望能帮到大家! 搜集不易,请予以点滴...
jeromq-0.3.5.jar 线程间通讯
2006-01-12 07:14 210708 181199 易语言模块大全\QQ通讯协议模块.ec 2005-10-21 23:30 334447 179054 易语言模块大全\RAR压缩模块 1.0.ec 2005-10-21 15:30 4027 1183 易语言模块大全\RC4 加密算法 1.0.ec 2004-08-...