JAVA应用23--5.28_第1页
JAVA应用23--5.28_第2页
JAVA应用23--5.28_第3页
JAVA应用23--5.28_第4页
JAVA应用23--5.28_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 1、实现线程的方法主要有哪两种? 2、简述java.lang.Thread 类中定义的五个方法:run()、 start() 、stop() 、suspend() 、resume() 的作用?宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 线程组的基本知识线程组的基本知识 多线程的应用多线程的应用 宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 通常,一个程序可能包含若干线程,如何来管理这些线程呢?

2、Java语言提供了线程组,线程组可以同时控制一组线程。实际上,线程组就是一种可以管理一组线程的类。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 可以用构造方法ThreadGroup()来构造一个线程组,如下所示: String grounName = ; ThreadGroup g = new ThreadGroup(groupName); ThreadGroup()方法的参数表示一个线程组,因此该串参数必须是惟一的。 也可以用Thread类的构造方法往一个指定的线程组里添加新的线程: Thread t = new Thread(g, threadName);宜宾职

3、业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 activeCount()方法用于检测某个指定线程组是否有线程处于活动状态: if (g.activeCount() = = 0) / 线程g的所有线程都已停止 要中断一个线程组中的所有线程,可以调用 ThreadGroup类的方法interrupt(): errupt(); 线程组可以嵌套,即线程组可以拥有子线程组。缺省时,一个新创建的线程或线程组都属于当前线程组所属的线程组。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业1、synchronized的基本概念 关键字synchronize

4、d提供Java编程语言一种机制,允许程序员控制共享数据的线程。 我们知道,进程允许两个或者更多个线程同时执行。这些线程也可以共享对象和数据,但在这种情形下,不同的线程在同一时间内不能存取同一数据,这是因为在开始设计Java的时候,就采用了线程的概念。 宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 J a v a 语 言 定 义 了 一 个 特 殊 的 关 键 字synchronized(同步),该关键字可以应用到代码块上。该关键字的目的是防止多个线程在同一时间执行同一代码块内的代码。 定义一个同步方法的格式如下: public|private synchronize

5、d type methodname(.) 宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业2、多线程的控制 线程有两个缺陷:死锁和饥饿。 所谓死锁,就是一个或者多个线程,在一个给定的任务中,协同作用,互相干涉,从而导致一个或者更多线程永远等待下去。与此类似,所谓饥饿,就是一个线程永久性地占有资源,使得其他线程得不到该资源。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 首先我们看一下死锁的问题。一个简单的例子就是:你到ATM机上取钱,却看到如下的信息“现在没有现金,请等会儿再试。”,你需要钱,所以你就等了一会儿再试,但是你又看到了同样的信息;与

6、此同时,在你后面,一辆运款车正等待着把钱放进ATM机中,但是运款车到不了ATM取款机,因为你的汽车挡着道。在这种情况下,就发生了所谓的死锁。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业导致死锁的发生: 相互排斥:一个线程或者进程永远占有一共享资源,例如,独占该资源。 循环等待:进程A等待进程B,而后者又在等待进程C,而进程C又在等待进程A。 部分分配:资源被部分分配。例如,进程A和B都需要访问一个文件,并且都要用到打印机,进程A获得了文件资源,进程B获得了打印机资源。 缺少优先权:一个进程访问了某个资源,但是一直不释放该资源,至使该进程处于阻塞状态。宜宾职业技术学院

7、计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 为了避免出现死锁的情况,就必须在多线程程序中做同步管理。 java.lang.Object类中提供了两个用于线程通信的方法:wait()和notify()。 为了让线程对一个对象调用wait()或notify(),线程必须锁定那个特定的对象。也就是说,只能在它们被调用的实例的同步块内使用wait()和notify()。当某个线程执行包含对一个特定对象执行wait()调用的同步代码时,这个线程就被放到与那个对象相关的等待池中。调用wait()的线程自动释放对象的锁标志。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专

8、业 对一个特定对象执行notify()调用时,将从对象的等待池中移走一个任意的线程,并放到锁池中。锁池中的对象一直在等待,直到可以获得对象的锁标记。notifyAll()方法将从等待池中移走所有等待那个对象的线程,并把它们放到锁池中。只有锁池中的线程能获取对象的锁标记,锁标记允许线程从上次因调用wait()而中断的地方开始继续运行。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 多线程之间的通信多线程之间的通信 Java 语言提供了各种各样的输入/输出流,使我们能够很方便地对数据进行操作。其中,管道(Pipe)流是一种特殊的流,用于在不同线程间直接传送数据(一个线程发送数据到输出管道,另一个线程从输入管道中读数据)。宜宾职业技术学院计算机应用与网络专业宜宾职业技术学院计算机应用与网络专业 Java提供了两个特殊的、专门的类用于处理管道,它们就是PipedInputStream类和PipedOutputStream类。 PipedInputStream代表了数据在管道中的输出端,也就是线程向管道读数据的一端; PipedOutputStream代表了数据在管道中的输入端,也就是线程向管道写数据的一端,这两个类一起使用可以提供数据的管道

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论