📄 java08_01.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>
<body background="Bg.gif">
<p align="center"><font size="5"><b>§8.1 线程的概念</b></font></p>
<p align="left"><b><font size="4">什么是进程</font></b>? </p>
<p align="left">
在操作系统中,通常将进程看作是系统资源的分配单位和独立运行的基本单位。一个任务就是一个进程。比如现在正在运行IE浏览器,同时还可以打开记事本,系统就会产生两个进程。通俗地说,一个进程既包括了它要执行的指令,也包括了执行指令时所需要的各种系统资源,如CPU、内存、输入输出端口等,不同进程所占用的系统资源相对独立。进程具有动态性、并发性、独立性和异步性等。</p>
<p align="left">
一般情况下,程序员并不需要对进程有更多的了解,我们前面编写的程序一旦被执行,都是独立的进程。它所需要的资源,大多数由操作系统来自动分配,无须程序员操心。</p>
<p align="left"><b><font size="4">什么是线程?</font></b></p>
<p align="left"> 线程是一个比较新的概念,在20世纪80年代末才真正被引入,它在提高系统吞吐率、有效利用系统资源、改善用户之间的通讯效率以及发挥多处理机的硬件性能等方面都有显著的作用。因此线程在现代操作系统中得到了广泛的应用,如Windows、Unix、Linux等都提供了多线程机制。</p>
<p align="left">
线程是比进程更小的执行单位。某一个进程在执行过程中,可以产生多个线程。每个线程都有自己相对独立的资源(这个和进程非常相似)、生存周期。线程之间可以共享代码和数据、实时通讯、进行必要的同步操作。</p>
<p align="left">
进程和线程最大的区别在于:进程是由操作系统来控制的,而线程是由进程来控制的。所以很多由操作系统完成的工作必须交由程序员完成。我们前面所写的程序都是单线程的程序,如果需要设计多线程的程序,难度就要大一些。在传统的C/C++、OP等语言中,都是利用操作系统的多线程支持库来完成多线程的程序设计,线程之间的同步、异步、并发、互斥等控制起来比较麻烦(当然好的开发环境也会用类来对这些进行封装)。而Java在语言这一级提供了对多线程的支持,它本身就提供了同步机制,大大方便了用户,降低了设计程序的难度。</p>
<p align="left"><b><font size="4">Java语言中线程控制的5种状态</font></b></p>
<p align="left"> <font size="4"> </font>Java中用Thread类和它的子类对象来表示线程。一个线程总是处于下面5种状态之一</p>
<ol>
<li>
<p align="left">新建:当创建一个Thread类和它的子类对象后,新产生的线程对象就处于新建状态。并获得除CPU外所需的资源。</li>
<li>
<p align="left">就绪:当处于新建状态的线程被启动后,将进入线程队列等待CPU资源,这时它已经具备了运行的条件,一旦获得CPU资源,就可以脱离创建它的主线程独立运行了。另外,原来处于阻塞状态的线程结束阻塞状态后也将进入就绪状态。</li>
<li>
<p align="left">运行:当一个就绪状态的线程获得CPU时,就进入了运行状态。每个Thread类及其子类对象都有一个run()方法,一旦线程开始运行,就是自动运行该方法。</li>
<li>
<p align="left">阻塞:一个正在运行的线程因为某种特殊的情况,比如某种资源无法满足,就让出CPU并暂时停止自身的运行,进入阻塞状态。只有当引起阻塞的原因消除时,它才能重新进入就绪状态。</li>
<li>
<p align="left">死亡:不具备继续运行能力的线程处于死亡状态。这一般是由两种情况引起的:一是run()方法已经运行完毕了,一是由其它的线程(一般是主线程)强制终止它。</li>
</ol>
<p align="left"><a href="index.htm">回目录</a> <a href="java07_04.htm">上一课</a>
<a href="java08_02.htm">下一课</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -