java开发实战教师讲解030902线程常用操作方法课件_第1页
java开发实战教师讲解030902线程常用操作方法课件_第2页
java开发实战教师讲解030902线程常用操作方法课件_第3页
java开发实战教师讲解030902线程常用操作方法课件_第4页
java开发实战教师讲解030902线程常用操作方法课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 MLDN 软件教学研发部软件教学研发部JAVA 应用开发详解应用开发详解第9章:多线程 线程常用操作方法MLDN MLDN E-MAIL:mldnq本章目标 了解设置和取得线程名称 了解线程的强制运行 了解线程的休眠 了解线程的礼让 了解线程的中断操作E-MAIL:mldnq线程操作的主要方法 No.方法名称方法名称类型类型描述描述1public Thread(Runnable target)构造接收Runnable接口子类对象,实例化Thread对象2public Thread(Runnable target,String name)构造接收Runnable接口子类对象,实例化Thread

2、对象,并设置线程名称3public Thread(String name)构造实例化Thread对象,并设置线程名称4public static Thread currentThread()普通返回目前正在执行的线程5public final String getName()普通返回线程的名称6public final int getPriority()普通发挥线程的优先级7public boolean isInterrupted()普通判断目前线程是否被中断,如果是,返回true,否则返回false8public final boolean isAlive()普通判断线程是否在活动,如果是,

3、返回true,否则返回false9public final void join() throws InterruptedException普通等待线程死亡10public final synchronized void join(long millis) throws InterruptedException普通等待millis毫秒后,线程死亡11public void run()普通执行线程12public final void setName(String name)普通设定线程名称13public final void setPriority(int newPriority)普通设定线程

4、的优先值14public static void sleep(long millis) throws InterruptedException普通使目前正在执行的线程休眠millis毫秒15public void start()普通开始执行线程16public static void yield()普通将目前正在执行的线程暂停,允许其它线程执行17public final void setDaemon(boolean on)普通将一个线程设置成后台运行18public final void setPriority(int newPriority)普通更改线程的优先级E-MAIL:mldnq取得

5、和设置线程名称 在Thread类中,可以通过getName()方法取得线程的名称,通过setName()方法设置线程的名称。 线程的名称一般在启动线程前设置,但也允许为已经运行的线程设置名称。允许两个Thread对象有相同的名字,但为了清晰,应该尽量避免这种情况的发生。 另外,如果程序并没有为线程指定名称,则系统会自动的为线程分配一个名称。E-MAIL:mldnq设置和取得线程的名字 class MyThread implements Runnable/ 实现Runnable接口public void run()/ 覆写接口中的run()方法for(int i=0;i3;i+)/ 循环输出3次

6、System.out.println(Thread.currentThread().getName()+ 运行, i = + i) ;/ 取得当前线程的名字;public class ThreadNameDemo public static void main(String args) MyThread my = new MyThread() ;/ 定义Runnable子类对象new Thread(my).start() ;/ 系统自动设置线程名称new Thread(my,线程-A).start() ;/ 手工设置线程名称new Thread(my,线程-B).start() ;/ 手工设置

7、线程名称new Thread(my).start() ;/ 系统自动设置线程名称new Thread(my).start() ;/ 系统自动设置线程名称;E-MAIL:mldnq程序说明 从运行结果中发现没有设置线程名称的其余三个线程对象的名字都是很有规律的:Thread-0、Thread-1、Thread-2,从之前讲解的static关键字可以知道,在Thread类中必然存在一个static类型的属性,用于为线程自动命名。 E-MAIL:mldnq观察程序的输出 class MyThread implements Runnable/ 实现Runnable接口public void run()

8、/ 覆写接口中的run()方法for(int i=0;i3;i+)/ 循环输出3次System.out.println(Thread.currentThread().getName()+ 运行, i = + i) ;/ 取得当前线程的名字;public class CurrentThreadDemo public static void main(String args) MyThread my = new MyThread() ;/ 定义Runnable子类对象new Thread(my,线程).start() ;/ 启动线程my.run() ; / 直接调用run方法;E-MAIL:mld

9、nq判断线程是否启动 通过Thread类之中的start()方法通知CPU这个线程已经准备好启动,之后就等待分配CPU资源,运行此线程了。那么如何判断一个线程是否已经启动了呢?在Java中可以使用isAlive()方法来测试线程是否已经启动而且仍然在启动。 E-MAIL:mldnq判断线程是否启动 class MyThread implements Runnable / 实现Runnable接口public void run() / 覆写run()方法for (int i = 0; i + i);/ 取得当前线程名称;public class ThreadAliveDemo public st

10、atic void main(String args) MyThread mt = new MyThread();/ 实例化对象Thread t = new Thread(mt, 线程);/ 实例化Thread对象System.out.println(线程开始执行之前 - + t.isAlive();/ 判断是否启动t.start();/ 启动线程System.out.println(线程开始执行之后 - + t.isAlive();/ 判断是否启动for (int i = 0; i + i);/ 输出System.out.println(代码执行之后 - + t.isAlive();/ 后面

11、的输出结果不确定;E-MAIL:mldnq线程的强制运行 在线程操作中,可以使用join()方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行。 E-MAIL:mldnq线程的强制运行 class MyThread implements Runnable / 实现Runnable接口public void run() / 覆写run()方法for (int i = 0; i + i);/ 输出线程名称;public class ThreadJoinDemo public static void main(String args) MyThread

12、mt = new MyThread();/ 实例化对象Thread t = new Thread(mt, 线程);/ 实例化Thread对象t.start();/ 线程启动for (int i = 0; i 10) / 判断变量内容try t.join(); / 线程t进行强制运行 catch (Exception e) / 需要进行异常处理System.out.println(Main 线程运行 - + i);E-MAIL:mldnq线程的休眠 在程序中允许一个线程进行暂时的休眠,直接使用Thread.sleep()方法即可。 E-MAIL:mldnq线程的休眠 class MyThread

13、 implements Runnable / 实现Runnable接口public void run() / 覆写run()方法for (int i = 0; i 5; i+) / 循环5次try Thread.sleep(500);/ 线程休眠 catch (Exception e) / 需要异常处理System.out.println(Thread.currentThread().getName() + 运行, i = + i);/ 输出线程名称;public class ThreadSleepDemo public static void main(String args) MyThre

14、ad mt = new MyThread();/ 实例化对象new Thread(mt, 线程).start();/ 启动线程;E-MAIL:mldnq中断线程 当一个线程运行的时候,另外一个线程可以直接通过interrupt()方法,中断其运行状态。 E-MAIL:mldnq线程的中断 class MyThread implements Runnable / 实现Runnable接口public void run() / 覆写run()方法System.out.println(1、进入run方法);try Thread.sleep(10000);/ 休眠10秒System.out.print

15、ln(2、已经完成休眠); catch (Exception e) System.out.println(3、休眠被终止);return;/ 让程序返回被调用处System.out.println(4、run方法正常结束);public class ThreadInterruptDemo public static void main(String args) MyThread mt = new MyThread();/ 实例化子类对象Thread t = new Thread(mt, 线程);/ 实例化线程对象t.start();try Thread.sleep(2000);/ 稍微停2秒再

16、继续中断 catch (Exception e) errupt();/ 中断线程执行;E-MAIL:mldnq后台线程 在Java程序中,只要前台有一个线程在运行,则整个java进程都不会消失,所以此时可以设置一个后台线程,这样即使Java进程结束了,此后台线程依然会继续执行。要想实现这样的操作,直接使用setDaemon()方法即可。 E-MAIL:mldnq后台线程的设置 class MyThread implements Runnable / 实现Runnable接口public void run() / 覆写run()方法while (true) / 无限制循环System.

17、out.println(Thread.currentThread().getName() + 在运行。);/ 输出线程名称;public class ThreadDaemonDemo public static void main(String args) MyThread mt = new MyThread();/ 实例化线程对象Thread t = new Thread(mt, 线程);/ 实例化Thread类对象t.setDaemon(true) ;/ 此线程在后台运行t.start();/ 启动线程;E-MAIL:mldnq线程的优先级 在Java的线程操作中,所有的线程在运行前都会保

18、持在就绪状态,那么此时,那个线程的优先级高,那个线程就有可能会先被执行。E-MAIL:mldnq线程优先级 在Java的线程中使用setPriority()方法可以设置一个线程的优先级,在Java的线程中一共有以下三种优先级 No.定义定义描述描述表示的常量表示的常量1public static final int MIN_PRIORITY最低优先级12public static final int NORM_PRIORITY中等优先级,是线程的默认优先级53public static final int MAX_PRIORITY最高优先级10E-MAIL:mldnq测试线程优先级 class

19、 MyThread implements Runnable / 实现Runnable接口public void run() / 覆写run()方法for (int i = 0; i 5; i+) / 循环5次try Thread.sleep(500);/ 线程休眠 catch (Exception e) / 需要异常处理System.out.println(Thread.currentThread().getName() + 运行, i = + i);/ 输出线程名称;public class ThreadPriorityDemo public static void main(String

20、args) Thread t1 = new Thread(new MyThread(),线程A);/ 实例化线程对象Thread t2 = new Thread(new MyThread(),线程B);/ 实例化线程对象Thread t3 = new Thread(new MyThread(),线程C);/ 实例化线程对象t1.setPriority(Thread.MIN_PRIORITY) ;/ 设置线程优先级为最低t2.setPriority(Thread.MAX_PRIORITY) ;/ 设置线程优先级为最高t3.setPriority(Thread.NORM_PRIORITY) ;/ 设置线程优先级为中等t1.start() ;/ 启动线程t2.start() ;/ 启动线程t3.start() ;/ 启动线程E-MAIL:mldnq主方法的优先级是NORM_PRIORITYpublic class MainPriorityDemo public static void main(String args)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论