JAVA应用23--5.28.pptVIP

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

多线程的应用 钱新杰 复习提问 1、实现线程的方法主要有哪两种? 2、简述java.lang.Thread 类中定义的五个方法:run()、 start() 、stop() 、suspend() 、resume() 的作用? 线程组的基本知识 多线程的应用 通常,一个程序可能包含若干线程,如何来管理这些线程呢?Java语言提供了线程组,线程组可以同时控制一组线程。实际上,线程组就是一种可以管理一组线程的类。 可以用构造方法ThreadGroup()来构造一个线程组,如下所示: String grounName = …; ThreadGroup g = new ThreadGroup(groupName); ThreadGroup()方法的参数表示一个线程组,因此该串参数必须是惟一的。 也可以用Thread类的构造方法往一个指定的线程组里添加新的线程: Thread t = new Thread(g, threadName); activeCount()方法用于检测某个指定线程组是否有线程处于活动状态: if (g.activeCount() = = 0) {// 线程g的所有线程都已停止} 要中断一个线程组中的所有线程,可以调用 ThreadGroup类的方法interrupt(): g.interrupt(); 线程组可以嵌套,即线程组可以拥有子线程组。缺省时,一个新创建的线程或线程组都属于当前线程组所属的线程组。 1、synchronized的基本概念 关键字synchronized提供Java编程语言一种机制,允许程序员控制共享数据的线程。 我们知道,进程允许两个或者更多个线程同时执行。这些线程也可以共享对象和数据,但在这种情形下,不同的线程在同一时间内不能存取同一数据,这是因为在开始设计Java的时候,就采用了线程的概念。 Java语言定义了一个特殊的关键字synchronized(同步),该关键字可以应用到代码块上。该关键字的目的是防止多个线程在同一时间执行同一代码块内的代码。 定义一个同步方法的格式如下: [public|private] synchronized type methodname(...) 2、多线程的控制 线程有两个缺陷:死锁和饥饿。 所谓死锁,就是一个或者多个线程,在一个给定的任务中,协同作用,互相干涉,从而导致一个或者更多线程永远等待下去。与此类似,所谓饥饿,就是一个线程永久性地占有资源,使得其他线程得不到该资源。 首先我们看一下死锁的问题。一个简单的例子就是:你到ATM机上取钱,却看到如下的信息“现在没有现金,请等会儿再试。”,你需要钱,所以你就等了一会儿再试,但是你又看到了同样的信息;与此同时,在你后面,一辆运款车正等待着把钱放进ATM机中,但是运款车到不了ATM取款机,因为你的汽车挡着道。在这种情况下,就发生了所谓的死锁。 导致死锁的发生: ● 相互排斥:一个线程或者进程永远占有一共享资源,例如,独占该资源。 ● 循环等待:进程A等待进程B,而后者又在等待进程C,而进程C又在等待进程A。 ● 部分分配:资源被部分分配。例如,进程A和B都需要访问一个文件,并且都要用到打印机,进程A获得了文件资源,进程B获得了打印机资源。 ● 缺少优先权:一个进程访问了某个资源,但是一直不释放该资源,至使该进程处于阻塞状态。 为了避免出现死锁的情况,就必须在多线程程序中做同步管理。 java.lang.Object类中提供了两个用于线程通信的方法:wait()和notify()。 为了让线程对一个对象调用wait()或notify(),线程必须锁定那个特定的对象。也就是说,只能在它们被调用的实例的同步块内使用wait()和notify()。当某个线程执行包含对一个特定对象执行wait()调用的同步代码时,这个线程就被放到与那个对象相关的等待池中。调用wait()的线程自动释放对象的锁标志。 对一个特定对象执行notify()调用时,将从对象的等待池中移走一个任意的线程,并放到锁池中。锁池中的对象一直在等待,直到可以获得对象的锁标记。notifyAll()方法将从等待池中移走所有等待那个对象的

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档