第14章 多线程.doc

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程 概述 对于程序编程来说,如果能够并发执行的程序编写称为并发编程。 进程也称任务,是指操作系统中一个独立运行的程序。 进程和进程之间资源不能互相利用。 对于只有一个CPU的计算机,它是如何运作的? CPU采用的原理是分时执行的。每个进程会处于操作系统中队列中,每个进程会依次获得一个时间片来执行程序。但是时间片非常的小,因此用户感觉不到,感觉任务是在同时执行。【优先级】,进程和进程之间有一个切换,它也需要占用时间。 进程概念相对比较大,而且进程之间资源不能互相利用,因此程序中设计了另外一个概念------》线程。 线程【Thread】是指同一个程序内部【进程】每个单独执行的流程。JAVA中其实main方法就表示一个线程。多线程是实现并发执行的一种有效手段,线程是比进程更小的执行单位,而且线程之间资源可以相互利用。线程的运作也是分时执行的。 线程的优势:【同时:不是同一个时间点,是同一个时间段。时间段非常的小,感知是在同时执行。】 多线程同时处理多件事情。【多CPU】 记者招待会。记者当成一个线程,如果是采用单线程的方式,【一个记者必须全部问完问题才能下一个记者问问题,但是该记者在询问过程中有一个思考的时间】。 铁道部系统。例如一个浏览器发送一个请求,服务器接受请求时,将创建一个线程。如果是只有一个浏览器的话,那么分配的时间将很充足,因此用户感觉到系统非常快。但是如果多个浏览器发送请求,那么服务器将创建多个线程与浏览器进行交互,反馈HTML代码。只是每个线程分配的时间片就会很少,而且等待的时间会变长,因此用户感觉该系统变慢,很长时间才能收取到服务器反馈的信息。 下载文件。 线程的生命周期: 新建状态 New,表示线程已初始化完成,但是还没有启动。 就绪状态【可运行状态】 所有事情都准备好了,就等着分配时间片。 运行状态 是指线程的正常运行,需要有对应的时间片分配。通过start方法进行线程的启动。 阻塞状态 通过sleep方法和wait方法达到该目的。遇到阻塞事件的时候转变为阻塞状态。 死亡状态 线程执行结束,释放系统占有的系统资源。 在实际使用线程时,首先需要创建一个线程对象。线程对象创建完毕之后,该线程处于新建状态,新建状态初始化完成,但是还没有启动。在新建状态下,可以通过start方法将线程启动,使线程处于可运行状态。一旦线程进入可运行状态,则排队开始等待CPU执行。根据系统的调令,线程就会在可运行状态和阻塞状态之间进行切换。当线程执行完或者结束该线程时,将线程切换到死亡状态,释放其占有的资源。 线程创建 继承Thread类 如果一个类继承了Thread类,那么该类就具备了多线程的能力。 如果需要该类具有多线程能力,必须对run方法进行重写。 public class FirstThreadDemo1 extends Thread{ @Override public void run() { for (int i = 0; i 10; i++) { System.out.println(run:+i); } } public static void main(String[] args) { FirstThreadDemo1 ft = new FirstThreadDemo1();//实例化线程类 ft.start();//启动线程 如果要让该线程做自己的事情,重写run方法 for (int i = 0; i 1000; i++) { System.out.println(main:+i); } } } 如何将线程进入阻塞状态? public class FirstThreadDemo1 extends Thread{ @Override public void run() { for (int i = 0; i 10; i++) { System.out.println(run:+i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { FirstThreadDemo1 ft = new FirstThreadDemo1();//实例化线程类 ft.start();//启动线程 如果要让该线程做自己的事情,重写run方法 for (int i = 0; i 10; i++) { System.out.println(main:+i

文档评论(0)

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

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

1亿VIP精品文档

相关文档