没有合适的资源?快使用搜索试试~ 我知道了~
java多线程教程 java多线程教程
需积分: 10 11 下载量 136 浏览量
2011-01-15
23:44:37
上传
评论
收藏 97KB DOC 举报
温馨提示
试读
12页
java多线程教程java多线程教程java多线程教程java多线程教程
资源推荐
资源详情
资源评论
Java2 程序设计实用教程(电子教案)
第七章 多线程机制
【课前思考】
什么是线程?它和进程有什么区别?适用方向是什么?
Java 的线程是如何实现的?
Java 的线程是如何调度的?
Java 中的多线程有什么特点?同步和互斥的原理是如何实现的?
【学习目标】
学习 java 中线程的使用,掌握线程的调度和控制方法,清楚地理解多线程的互斥和同步的实现原理,
以及多线程的应用。
【学习指南】
掌握线程之间的相互调度关系,尤其是通过线程睡眠来使其它线程获得执行机会的机制,以及互斥和
同步的实现机制。
【难 重 点】
多线程的调度和控制。
多线程的互斥和同步。
【知 识 点】
线程简介
多线程的互斥与同步
【内 容】
第一节 线程的概念
随着计算机的飞速发展,个人计算机上的操作系统也纷纷采用多任务和分时设计,将早期只有大型计
算机才具有的系统特性带到了个人计算机系统中。一般可以在同一时间内执行多个程序的操作系统都有进
程的概念。一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间、一组系统资源 。
在进程概念中,每一个进程的内部数据和状态都是完全独立的。Java 程序通过流控制来执行程序流,程序
中单个顺序的流控制称为线程,多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的
任务。多线程意味着一个程序的多行语句可以看上去几乎在同一时间内同时运行。
线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制;但与进程不同的是 ,
同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据 ,
以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进
程小的多,正因如此,线程被称为轻负荷进程(light-weight process)。一个进程中可以包含多个线程。
程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本
进程(process)是程序的一次执行过程,是系统运行程序的基本单位
多任务(multitask)是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每个任务
对应一个进程
同进程一样,一个线程也有从创建、运行到消亡的过程,称为线程的生命周期。用线程的状态
(state)表明线程处在生命周期的哪个阶段。线程有创建、可运行、运行中、阻塞、死亡五中状态。通过
线程的控制与调度可使线程在这几种状态间转化
每个程序至少自动拥有一个线程,称为主线程。当程序加载到内存时,启动主线程。要加载其他线程 ,
程序就要使用 Runnable 接口和 Thread 类
第 1 页共 12 页
Java2 程序设计实用教程(电子教案)
第二节 Runnable 接口与 Thread 类
Runnable 接口
Runnable 接口中声明了一个 run 方法
public void run()
Runnable 接口中的 run 方法只是一个未实现的方法。一个线程对象必须实现 run 方法完成线程的所有
活动,已实现的 run 方法称为该对象的线程体。
任何实现 Runnable 接口的对象都可以作为一个线程的目标对象.
Thread 类
Thread 类将 Runnable 接口中的 run 方法实现为空方法,并定义许多用于创建和控制线程的方法。格式
为:
public class Thread extends Object implements Runnable
构造方法:
public Thread( )
public Thread(String name)
public Thread(Runnable target)
public Thread(Runnable target,String name)
public Thread(ThreadGroup group,Runnable target)
public Thread(ThreadGroup group,String name)
public Thread(ThreadGroup group,Runnable target,String name)
Thread 类的静态方法:
public static Thread currentThread( ) //返回当前执行线程的引用对象
public static intactiveCount() //返回当前线程组中活动线程个数
public static enumerate(Thread[] tarray) //将当前线程组中的活动线程拷贝到 tarray 数组中,包括子线程
Thread 类的实例方法:
public final String getName() //返回线程名
public final void setName(String name) //设置线程的名字为 name
public void start() //启动已创建的线程对象
public final boolean isAlive() //返回线程是否启动的状态
public final ThreadGroup getThreadGroup() //返回当前线程所属的线程组名
public String toString() //返回线程的字符穿信息
例 7.1 继承 Thread 类创建线程
本例淙通过继承 Thread 类来创建线程的方法。类 Thread1 声明为 Thread 的子类,它的构造方法定义
线程名和起始参数。
程序如下:
public class Thread1 extends Thread
{
int k=0;
public Thread1(String name,int k)
{
super(name);
this.k = k;
}
public void run() //覆盖 run 方法的线程体
第 2 页共 12 页
Java2 程序设计实用教程(电子教案)
{
int i = k;
System.out.println();
System.out.print(getName()+": ");
while (i<50)
{
System.out.print(i+" ");
i+=2;
}
System.out.println(getName() +" end!");
}
public static void main (String args[])
{
Thread1 t1 = new Thread1("Thread1",1); //创建线程对象
Thread1 t2 = new Thread1("Thread2",2);
t1.start(); //启动执行线程
t2.start();
System.out.println("activeCount="+t2.activeCount());
}
}
程序运行结果:
activeCount=3
Thread1: 1 3 5 7 9 11 13 15 17 19 21 23 25 27
Thread2: 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34
36 38 40 42 44 46 48 Thread2 end!
29 31 33 35 37 39 41 43 45 47 49 Thread1 end!
两种创建线程方法的比较
比较两者的特点和应用领域:
直接继承线程 Thread 类。该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能在
继承其他类
实现 Runnable 接口。当一个线程已继承了另一个类时,就只能用实现 Runnable 接口的方法来创建线
程,且便于保持程序风格的一致性。
线程组
每个线程都是一个线程组的成员,线程组把多个线程集成为一个对象,通过线程组可以同时对其中的
多个线程进行操作,如启动一个线程组的所有线程等。Java 的线程组由 java.lang 包中的 Thread——Group
类实现。
ThreadGroup 类用来管理一组线程,包括:线程的数目,线程间的关系,线程正在执行的操作,以及
线程将要启动或终止时间等。线程组还可以包含线程组。在 Java 的应用程序中,最高层的线程组是名位
main 的线程组,在 main 中还可以加入线程或线程组,在 mian 的子线程组中也可以加入线程和线程组,形
成线程组和线程之间的树状继承关系
第二节 线程的控制与调度
线程的生命周期
第 3 页共 12 页
剩余11页未读,继续阅读
资源评论
雷尔
- 粉丝: 46
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功