java程序设计-第6章线程

上传人:第*** 文档编号:49748344 上传时间:2018-08-02 格式:PPT 页数:48 大小:236KB
返回 下载 相关 举报
java程序设计-第6章线程_第1页
第1页 / 共48页
java程序设计-第6章线程_第2页
第2页 / 共48页
java程序设计-第6章线程_第3页
第3页 / 共48页
java程序设计-第6章线程_第4页
第4页 / 共48页
java程序设计-第6章线程_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《java程序设计-第6章线程》由会员分享,可在线阅读,更多相关《java程序设计-第6章线程(48页珍藏版)》请在金锄头文库上搜索。

1、Java的多线程目录和要求Java程序通过流控制来执行程序流,程序中单个顺序的流 控制称为线程,多线程则指的是在单个程序中可以同时运行多 个不同的线程,执行不同的任务。多线程意味着一个程序的多 行语句可以看上去几乎在同一时间内同时运行。线程与进程相 似,是一段完成某个特定功能的代码,是程序中单个顺序的流 控制;但与进程不同的是,系统在产生一个线程,或者在各个 线程之间切换时,负担要比进程小的多,正因如此,线程被称 为轻负荷进程(light-weight process)。一个进程中可以包含 多个线程。 学时:1学时Java的多线程 讲义 1 多线程的概述 2 多线程的实现方法与控制 3 多线程

2、的互斥 4 多线程的同步 5 多线程的应用 6 总结 多线程的概念线程是程序中的一条执行路径。多线程是指程序中包含多条执行路径 。在一个程序中可以同时运行多个不同的线程来执行不同的任务,即 允许单个程序创建多个并行执行的线程来完成各自的任务。浏览器程 序就是一个多线程的例子,在浏览器中可以在下载Java小程序或图像 的同时滚动页面,在访问新页面时,播放动画和声音,打印文件等。 Java对多线程的支持Java语言里,线程表现为线程类。Thread线程类封装了所有需要的 线程操作控制。在线程对象里有很多方法来控制一个线程是否运行, 睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个 Ja

3、va程序启动后,就已经有一个线程在运行。可通过调用 Thread.currentThread方法来查看当前运行的是哪一个线程。多线程的概述 下面是一些常用线程类的方法。 (1)类方法 currentThread():返回正在运行的Thread对象。 yield():停止运行当前线程,将CPU控制权主动移交到下一 个可运行线程。 sleep(int n):让当前线程睡眠n毫秒,n毫秒后,线程可以再 次运行。 (2)实例(对象)方法 start():为本线程建立一个执行环境,然后调用本线程的 run()方法。 run():在其中书写运行本线程的将要执行的代码,也是 Runnable接口的唯一方法。

4、当一个线程初始化后,由start() 方法来调用它,一旦run()方法返回,本线程也就终止了。 stop():让某线程马上终止,系统将删除本线程的执行 环境。 suspend():将线程挂起,暂停运行,但系统不破坏线程的 执行环境,可以用resume()来恢复本线程的执行。resume():恢复被挂起的线程进入可运行状态。 setPriority(int p):给线程设置优先级1=p=10。 getPriority():返回线程的优先级。 setName(String name):赋予线程一个名字name。 getName():取得由setName()方法设置的线程名字的字符串 。 wait(

5、long timeout):停止当前线程,直到另外的线程对这 个对象使用notify()或notifyAll()方法。notify()或 notifyAll():唤醒指定对象的一个或所有线程。 线程的状态和生命周期 一个线程从创建、启动到终止期间的任何时刻,总是处于 下面五个状态中的某个状态。 1.创建状态 用new运算符创建一个Thread类或子类的实例对象时,形 成的新线程就进入创建状态,但此时还未对这个线程分配 任何资源,没有真正执行它。 2.可运行状态 在创建线程后,若要执行它,系统要对这个线程进行登记 ,并为它分配系统资源,这些工作由start()启动方法来 完成。线程启动后,将进入

6、线程队列排队等待CPU时间片 ,成为可运行状态(或称为就绪状态)。此时线程已经具 备了运行的条件,一旦它获得CPU等资源时,就可以脱离 开创建它的主线程而独立运行。 3.运行状态 当可运行状态的线程被调度并获得CPU等资源时,便进入 运行状态。 4.阻塞状态 由于人为或系统的原因,线程必须停止运行,以后还可以 恢复运行的状态称为阻塞状态。发生以下几种情况之一后 ,线程进入阻塞状态。 (1)调用了该线程的sleep()休眠方法。 (2)该线程正在等待I/O操作完成。 (3)调用了wait()等待方法。 (4)调用了suspend()挂起方法。 5.终止状态 运行run()方法完成后或调用stop

7、()或destroy()方法就进 入线程的终止态(或称为死亡状态)。处于这种状态的线 程不具有继续运行的能力。 线程的调度和优先级 处于可运行状态的线程进入线程队列排队等待CPU等资 源时,同一时刻在队列中的线程可能有多个,它们完 成各自任务的轻重缓急程度是不同的。为了体现上述 差别,多线程系统会给每个线程自动分配一个线程的 优先级。任务较重要或紧急的线程,分配较高的优先 级,在可运行态的线程队列中就往前排;否则,就分 配较低的优先级。优先级低的线程只能等到优先级高 的线程执行完后才被执行。对于优先级相同的线程, 则遵循队列的“先进先出”原则,即先到的线程先获 得系统资源来运行。 在Java语

8、言中,对一个新建的线程,系统会分配一个 缺省的线程优先级:继承创建这个线程的主线程的优 先级(一般为普通优先级)。 Thread类也提供了方法setPriority()来修改线程的优先级。该 方法的参数一般可用Thread类的优先级静态常量: PRIORITY.NORM_PRIORITY 普通优先级(5) PRIORITY.MIN_PRIORITY 最低优先级(1) PRIORITY.MAX_PRIORITY 最高优先级(10)当一个在可运行状态队列中排队的线程被分配到CPU等资源而 进入运行状态后,这个线程就称为是被“调度”或被线程调 度管理器选中了。线程调度管理器负责管理线程排队和CPU等

9、 资源在线程间的分配。多线程的实现方法与控制 可以通过继承Thread类或实现Runnable接口这两种途径来构造 自己的run()方法。 多线程的实现方法 1.继承Thread类 可通过继承Thread类并重写其中的run()方法来定义线程体以 实现线程的具体行为,然后创建该子类的对象以创建线程。 在继承Thread类的子类ThreadSubclassName中重写run()方法 来定义线程体的一般格式为: public class ThreadSubclassName extends Threadpublic ThreadSubclassName(). / 编写子类的构造方法,可缺省pub

10、lic void run(). / 编写自己的线程代码 用定义的线程子类ThreadSubclassName创建线程 对象的一般格式为: ThreadSubclassName ThreadObject =new ThreadSubclassName(); 然后,就可启动该线程对象表示的线程:ThreadObject.start(); /启动线程 2.实现Runnable接口 编写多线程程序的另一种的方法是实现Runnable接口。在一个类 中实现Runnable接口(以后称实现Runnable接口的类为Runnable 类),并在该类中定义run()方法,然后用带有Runnable参数的 Th

11、read类构造方法创建线程。 创建线程对象可用下面的两个步骤来完成: (1)生成Runnable类ClassName的对象 ClassName RunnableObject = new ClassName(); (2)用带有Runnable参数的Thread类构造方法创建线程对象。新 创建的线程的指针将指向Runnable类的实例。用该Runnable类的 实例为线程提供 run()方法-线程体。 Thread ThreadObject = new Thread(RunnableObject); 然后,就可启动线程对象ThreadObject表示的线程: ThreadObject.start(

12、); 在Thread类中带有Runnable接口的构造方法有: public Thread(Runnable target); public Thread(Runnable target, String name); public Thread(String name); public Thread(ThreadGroup group,Runnable target); public Thread(ThreadGroup group,Runnable target, String name); 其中,参数Runnable target表示该线程执行时运行target的 run()方法,Stri

13、ng name以指定名字构造线程, ThreadGroup group表示创建线程组。线程的建立举例public class MyThread extends Thread public MyThread(String name) super(name); public void run() for(int i=0;i3;i+) System.out.println(getName()+“is running“); try sleep(long)(Math.random()*1000); catch(InterruptedException e) System.out.println(e);

14、System.out.println(getName()+“has stopped.“); public static void main(String args) MyThread t1=new MyThread(“Thread1“); MyThread t2=new MyThread(“Thread2“); t1.start(); t2.start(); import javax.swing.*; public class MyThread1 extends JFrame implements Runnable private JTextArea textArea=new JTextArea(); public MyThread1() setTitle(“Test Multithread“); add(textArea); setSize(300,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void run() for(int i=0;i3;i+) textArea.append(Thread.currentThread().getName()+“is running.n“); try Thread.sleep(long)Math.random()*10

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号