Lesson14线程.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Lesson14线程

Lesson 14Java线程 苏州职业大学 计算机工程系 曾海2008 参考文献:/docs/books/tutorial/essential/threads/index.html 什么是线程? 现在编的程序全是顺序程序。开始,执行,结束。任意一个时刻只有一个“执行点” 单个的线程也是由开始,执行,结束构成。但是,线程本身不是程序。线程自己不能独立运行。 线程必须在一个程序内运行。请看线程和程序的关系图。 单个线程没新奇处。多个线程并行,有意义。 一个程序里有多个线程,同时运行,执行不同的任务。 线程的一些相关概念 线程又称轻量级进程。进程和线程差不多,只不过进程可以独立运行。而线程依赖于一个程序,没有程序线程不可以运行。所以称线程是依赖上下文的,轻量级进程。 在程序内运行的线程可以享受进程的资源 离开了程序的线程没意义。所以有execution context (执行上下文)之称,它指的就是线程。 使用线程:Timer/TimerTask 有Java.util包。里面有定时器。定时器的作用:在指定时间做某件事情。需要线程 Java.util.Timer是定时器类,它的某个对象在某个时间调度TimerTask的对象,做掉某件事情 大家看实例Reminder Timer Task class RemindTask extends TimerTask { public void run() { System.out.println(时间到!); timer.cancel(); //中止线程 } } public static void main(String args[]) { System.out.println(开始调度.); new Reminder(5); System.out.println(调度成功.); }} 使用定时器线程 Timer是系统线程类。它能调度TimerTask线程。(时间到,要做的事情写在TimerTask的子类中,本例中就是 class RemindTask extends TimerTask 如果继承TimerTask,则必须重写方法Run.,那里是时间到执行的代码。 使用定时器 建立一个定时器线程: timer = new Timer(); 建立定时时间到后,所做任务的线程new RemindTask(),这不影响主程序执行。 启动定时器timer.schedule(new RemindTask(), seconds*1000); 本例中定时5000毫秒。 定时器到,执行的方法是RemindTask里的run方法的代码。 停止定时器线程 程序运行,timer也运行,停止它有办法: 1 调用timer.cancel();中止 2 用new Timer(true). 创建dameon,定时器调度后会自动退出。 3 程序执行中,去掉所有指向Timer对象的引用。线程会中止。 4 调用system.exit() 5 在GUI程序中,部份线程天生就是非dameon的,只能用system.exit()来中止。 这个时间线程例子简单 线程如果只有一个,没问题 如果有几个线程,各自存取不同的变量,没问题 多个线程存取一个变量,怎么办?需要同步。 写的时候注意观察线程是否“安全” 自定义线程的run方法 Run方法里是主要执行代码。 TimerTask的父类是Thread类。它里面缺省有run方法。Run方法缺省什么都不做。 所以Thread让一个Runnable对象来做一些更具体的事情 Thread本身是Runnable的。 课堂练习 编程:改写程序,要求定时3秒,时间到,弹出窗口提示用户“时间到” 以Thread的子类身份实现线程 做Thread 的子类,超越Run方法。 做Thread的子类时,要写构造。构造里写Super(线程名)就成了。调用Thread的构造,给线程定个名字。 sleep((long)(Math.random() * 1000));sleep是线程的一个方法,它使线程休眠指定的毫秒。Math.random() 产生0-1的随机数。所以本句产生一个随机的睡眠秒数。 Try-catch捕捉可能产生的线程中断意外。 运行自定义线程 public class TwoThreadsDemo { public static void main (String[] args) { new SimpleThread(嘿嘿).start(); new SimpleThread(哈哈).start(); }} 新建线程:new 线程类。启动线程

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档