- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)