- 1、本文档共89页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 线程和网络编程精要
第三章线程和网络编程;在操作系统中都会涉及处理机管理,即会引入一个进程的概念,它是动态的、相互隔离的、独立运行的、是资源分配单位及调度的基本单位
进程是由进程控制块、程序段、数据段三部分组成
线程是共存于一个进程中的多个并发执行流
Java 是第一个在语言本身中显式地包含线程的主流编程语言,而不是对底层操作系统的调用;进程与线程是有区别的。进程(process)本质上是一个并发执行的程序。因此,基于进程(process-based)的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。基于线程(thread-based)的多任务处理环境中,线程是最小的执行单位,线程也称轻量级进程,共享进程的内存、文件句柄、和状态,单线程具有自己的堆栈、自己的程序计数器和自己的局部变量;多线程主要是为了节约CPU时间。多线程程序比多进程程序需要更少的管理费用。进程是重量级???任务,需要分配它们自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的,即进程切换需要花费大量处理机时间。而线程是轻量级的任务,共享相同的地址空间并且共同分享同一个进程。线程间通信是便宜的,线程间的切换也是低成本的;Java 运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程。实际上,Java 使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分
Java 是多线程处理模型。其优点在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分,即多个线程通过系统调度进行并发执行。在 Java 程序中出现线程阻塞,仅有一个线程暂停,其他线程继续运行;每个线程都有产生、运行、消亡的状态转换过程;创建状态(new Thread) :执行下列语句时,线程就处于创建状态:
Thread myThread = new MyThreadClass( ); 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源,尚未执行(start()尚未调用)
可运行状态( Runnable ):当一个线程处于可运行状态时,系统为这个线程分配了它需的系统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行( Runnable )状态。
如执行:Thread myThread = new MyThreadClass( );
myThread.start( );;不可运行状态(Not Runnable):不可运行状态也称为阻塞状态(Blocked)。因为某种原因(输入/输出、等待消息或其它阻塞情况),系统不能执行线程的状态。这时即使处理器空闲,也不能执行该线程。进入不可运行状态的原因有如下几条:
调用了sleep()方法;
调用了suspend()方法;
为等候一个条件变量,线程调用wait()方法;
输入输出流中发生线程阻塞。;死亡状态(Dead):线程的终止一般可通过两种方法实现:自然撤消(线程执行完)或是被停止(调用stop()方法)。不推荐通过调用stop()来终止线程的执行,而是让线程执行完;Java 的多线程系统建立于 Thread 类。Thread类封装了线程的执行。为创建一个新的线程,你的程序必须扩展 Thread 或实现 Runnable接口
Thread 类方法如下表:;Java线程模型;Java程序至少包含一个线程,即当 Java 程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:它是产生其他子线程的线程;通常它必须最后完成执行,因为它执行各种关闭动作
;尽管主线程在程序启动时自动创建,但它可以由一个 Thread 对象控制。为此,你必须调用方法 currentThread()获得它的一个引用,currentThread()是 Thread 类的公有的静态成员。它的通常形式如下:
static Thread currentThread()
该方法返回一个调用它的线程的引用。一旦获得主线程的引用,就可以像控制其他线程那样控制主线程;public class Test
{
public static void main(String args[])
{
Thread ct= Thread.currentThread();
System.out.println(Current thread: + ct);
ct.setName(Test);
System.out.println(After name change: + ct);
try
{
Thread.sleep(1000);
文档评论(0)