欢迎来到天天文库
浏览记录
ID:52769865
大小:192.91 KB
页数:60页
时间:2020-03-07
《Java实用编程技术 工业和信息化普通高等教育十二五 规划教材立项项目 教学课件 作者 王诚 第6章 线程.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、线程Java实用编程技术在操作系统中都会涉及处理机管理,即会引入一个进程的概念,它是动态的、相互隔离的、独立运行的、是资源分配单位及调度的基本单位进程是由进程控制块、程序段、数据段三部分组成线程是共存于一个进程中的多个并发执行流Java是第一个在语言本身中显式地包含线程的主流编程语言,而不是对底层操作系统的调用线程概念Java实用编程技术进程与线程是有区别的。进程(process)本质上是一个并发执行的程序。因此,基于进程(process-based)的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。基于线程(thread-based)的多任务处
2、理环境中,线程是最小的执行单位,线程也称轻量级进程,共享进程的内存、文件句柄、和状态,单线程具有自己的堆栈、自己的程序计数器和自己的局部变量线程概念Java实用编程技术多线程主要是为了节约CPU时间。多线程程序比多进程程序需要更少的管理费用。进程是重量级的任务,需要分配它们自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的,即进程切换需要花费大量处理机时间。而线程是轻量级的任务,共享相同的地址空间并且共同分享同一个进程。线程间通信是便宜的,线程间的切换也是低成本的线程概念Java实用编程技术Java运行系统在很多方面依赖于线程,所有
3、的类库设计都考虑到多线程。实际上,Java使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分Java是多线程处理模型。其优点在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分,即多个线程通过系统调度进行并发执行。在Java程序中出现线程阻塞,仅有一个线程暂停,其他线程继续运行Java线程模型Java实用编程技术每个线程都有产生、运行、消亡的状态转换过程Java线程模型Java实用编程技术创建状态(newThread):执行下列语句时,线程就处于创建状态:ThreadmyThread=newMyThreadClass()
4、;当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源,尚未执行(start()尚未调用)可运行状态(Runnable):当一个线程处于可运行状态时,系统为这个线程分配了它需的系统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行(Runnable)状态。如执行:ThreadmyThread=newMyThreadClass();myThread.start();Java线程模型Java实用编程技术不可运行状态(NotRunnable):不可运行状态也称为阻塞状态(Blocked)。因为某种原因(输入/输出、等待消息或其它阻塞
5、情况),系统不能执行线程的状态。这时即使处理器空闲,也不能执行该线程。进入不可运行状态的原因有如下几条:调用了sleep()方法;调用了suspend()方法;为等候一个条件变量,线程调用wait()方法;输入输出流中发生线程阻塞。Java线程模型Java实用编程技术死亡状态(Dead):线程的终止一般可通过两种方法实现:自然撤消(线程执行完)或是被停止(调用stop()方法)。不推荐通过调用stop()来终止线程的执行,而是让线程执行完Java线程模型Java实用编程技术Java的多线程系统建立于Thread类。Thread类封装了线程的执行。为创建一个
6、新的线程,你的程序必须扩展Thread或实现Runnable接口Thread类方法如下表:Java线程模型Java实用编程技术Java线程模型Java实用编程技术方法意义getName获得线程名称getPriority获得线程优先级jsAlive判定线程是否仍在运行join等待一个线程终止run线程的入口点.sleep在一段时间内挂起线程start通过调用运行方法来启动线程Java程序至少包含一个线程,即当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(mainthread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:它是产
7、生其他子线程的线程;通常它必须最后完成执行,因为它执行各种关闭动作主线程Java实用编程技术尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThread()是Thread类的公有的静态成员。它的通常形式如下:staticThreadcurrentThread()该方法返回一个调用它的线程的引用。一旦获得主线程的引用,就可以像控制其他线程那样控制主线程主线程Java实用编程技术publicclassTest{publicstaticvoidmain(Stri
8、ngargs[]){Threadct=Thread.current
此文档下载收益归作者所有