- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程 线程概念 通过扩展Thread类创建线程 通过实现Runnable接口创建线程 控制线程和线程状态 线程组 线程同步 为applet创建线程 实例学习 线程概念 线程概念(续) 一个线程(thread)是程序中完成一个任务的有始有终的执行流 多线程可以使程序反应更快、交互性更强,并能够提高执行效率 可以通过扩展Thread类或实现Runnable接口来创建线程 扩展Thread类创建线程 示例:使用Thread类创建并运行线程 在这个例子中,创建并运行如下三个线程: 第一个的线程打印100次字母a 第二个的线程打印100次字母b 第三个线程打印整数1到100 实现Runnable接口创建线程 示例:使用Runnable接口创建并运行线程 在这个例子中,创建并运行如下三个线程: 第一个的线程打印100次字母a 第二个的线程打印100次字母b 第三个线程打印整数1到100 控制线程 void run() Java运行系统调用该方法来执行线程。必须覆盖该方法并且提供线程执行的代码 void start() 启动线程,引起对Run()方法的调用。客户类中的可运行对象调用本方法 void stop()(deprecated) 停止线程 控制线程(续) void suspend()(deprecated) 挂起线程. 使用 resume() 方法唤醒进程 void resume()(deprecated) 唤醒用suspend() 方法挂起的进程 static void sleep(long millis)throws InterruptedException 将可运行的对象置为休眠状态,休眠时间为指定的毫秒;该方法是一个静态方法 线程的优先级 Java给每个线程指定一个优先级。默认情况下线程继承生成它的线程的优先级 改变和得到线程优先级 setPriority getPriority 优先级包含的一些常量 Thread.MIN_PRIORITY Thread.MAX_PRIORITY Thread.NORM_PRIORITY 线程状态 线程状态(续1) 新线程态(New Thread) 产生一个Thread对象就生成一个新线程。当线程处于“新线程”状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常 可运行态(Runnable)(就绪状态+运行状态) start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个处于可运行态的线程占用处理 机。Java通过调度来实现多线程对处理机的共享 线程状态(续2) 非运行态(Not Runnable)(阻塞状态) 当以下事件发生时,线程进入非运行态 suspend()方法被调用 sleep()方法被调用 线程使用wait()来等待条件变量 线程处于I/O等待 死亡态(Dead)(结束状态) 当run()方法返回或别的线程调用stop()方法,线程进入死亡态 。通常Applet使用它的stop()方法来终止它产生的所有线程 线程组 使用构造方法ThreadGroup来构造线程组 : ThreadGroup g = new ThreadGroup(timer thread group); 使用Thread 构造方法,将一个线程放到线程组中: Thread t = new Thread(g, new ThreadClass(), This thread); 线程组(续) 使用activeCount() 确定组里有多少个线程处于运行阶段: System.out.println(The number of runnable threads in the group + g.activeCount()); 线程的同步 如果一个共享资源被多个线程同时访问,可能会遭到破坏 例如:两个unsynchronized 线程同时进入相同的银行账户,资源将会引起冲突 示例:演示资源冲突 在这个例子中,创建并启动了100个线程,每个线程都往储钱罐中投入一便士,假定开始时储钱罐是空的 示例:演示资源冲突(续) synchronized 关键字 为避免资源冲突,Java使用关键字synchronized使方法通信同步 同步代码块 同步方法 重写上面的程序如下: 为applet创建线程 在“显示时钟”里,在applet中绘制时钟并显示当前时间。时钟显示后并不走动。怎么样才能让时钟每一秒都显示新的当前时间呢? 让时钟走动的关键是每一秒都重画一次显示当前时间的时钟。可以使用下面给出的代码覆盖Curr
文档评论(0)