ch12 多线程.pptVIP

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch12 多线程

Code or behavior Data or state Code or behavior Data or state object this object this Thread before synchronized(this) public void push(char c) { synchronized(this) { data[idx] = c; idx++; } } Thread after synchronized(this) public void push(char c) { synchronized(this) { data[idx] = c; idx++; } } Thread, trying to execute synchronized(this) public char pop() { synchronized(this) { idx--; return data[idx]; } } Code or behavior Data or state Object this Lockflag missing Waiting for Object lock 线程的同步 关键字synchronized: 如果一个方法中的所有代码都属于同步代码,则可以直接在方法前使用synchronized修饰 例如,下列方式等价: public synchronized String pop(){ …… } 与 public String pop(){ synchronized (this){ …… } } 线程的同步 关键字synchronized: 每个对象有唯一的同步锁 让持有锁标志的线程在不再需要的时候返回标志 在synchronized()代码段末尾自动释放锁 Java保证了即使出现了中断或异常,使得执行流程跳出synchronized()代码段,锁也会自动返回 两次synchronized调用,在跳出最外层块时,标志正确的被释放,忽略最内层的 synchronzied的声明不会被继承——即,子类覆盖父类中的synchronized修饰的方法时,子类中该方法不再保持同步,除非也用synchronized修饰 线程的通信 不同线程执行不同的任务,如果任务间有某种联系,线程之间必须能通信,以协调完成工作。 例如:生产者和消费者 Java中的线程通信: wait()方法: 线程释放对象锁,进入睡眠状态。wait()方法把线程放到与那个对象相关的等待池中 等待的事件发生时,另一个线程调用同一个对象的notify()方法 睡眠线程被唤醒,并试图再次获得锁 线程的通信 Java中的线程通信: notify()方法:从对象的等待池中移走一个任意的线程,放到锁池中 notifyAll()方法:移走所有等待那个对象的线程,放入锁池 说明: 锁池中的线程获得锁标志后,从上次调用wait()被中断的地方继续执行 不管是否有线程在等待,都可以调用notify,而在这个对象的锁标记等待池中并没有阻塞的线程,那么notify不起作用。对notify()调用不会被存储 多线程控制示例 生产者、消费者之间的同步、互斥问题 参见SyncTest.java 经典弹球示例 参见BounceThread.java 习题 编写程序,启动100个线程,每个线程给初始值为0的变量sum加1。需要通过引用传递将sum传递给每一个线程。为了能够引用传递,需要为sum定义一个包装类对象Integer。分别使用同步、不同步来运行程序,看看其影响。 多线程 主要内容 线程概述 线程的创建和启动 线程的状态及转换 线程的调度与控制 线程的其他重要方法 线程组 定时器 线程的同步和通信 线程概述 程序-进程-线程 程序:为完成特定任务、用某种语言编写的一组指令的集合。是一段静态的代码 进程:程序的一次执行过程,是系统进行调度和资源分配的一个独立单位。 是一个动态过程 线程:是比进程更小的执行单位 与进程的区别: 线程没有入口、出口,其自身不能自动运行,而必须栖身于某个进程中,由进程触发 在系统资源使用上,属于同一进程的所有线程共享该进程的系统资源(因此切换速度比进程快得多) 线程概述 多线程: 多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况。 多线程实现单个进程中的并发计算。 各线程间共享进程空间的数据,并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。 多线程的程序能更好地表述和解决现实世界的具体问题,是计算机应用开发和程序设计的一个必然发展趋势。 线程概述 Java与多线程 Java

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档