Java语言第13章 Java多线程机制
25页1、13.1 Java中的线程 13.2 通过继承Thread类实现多线程 13.3 通过Runnable接口实现多线程 13.4 线程的调度 13.5 线程的同步,第13章 Java多线程机制,13.1 Java中的线程,计算机的发展日新月异,个人计算机上的操作系统也纷纷采用多任务和分时设计,将早期只有大型计算机才具有的系统特性带到了个人计算机系统中。一般可以在同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程概念中,每一个进程的内部数据和状态都是完全独立的。,13.1.1 进程与线程,进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。如果把公司一天的工作比作一个进程,那么早上公司开门上班是进程的开始,晚上下班关门是进程的结束。,13.1.1 进程与线程,线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。就像公司一
2、天的工作开始后,可以有多个不同的“线程”进行运作,如财务部门、开发部门、销售部门等。,13.1.2 线程的状态,一个线程在任何时候都处于某种线程状态。线程的几个主要状态有创建、运行、中断和死亡4 种状态。 创建(New Thread) Java的线程是通过java.lang.Thread类来实现的。当我们生成一个Thread类的对象之后,一个新的线程就产生了。执行下列语句时,线程就处于创建状态: Thread myThread = new MyThreadClass(); 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。,13.1.2 线程的状态,运行(Runnable) 线程创建之后就具备了运行的条件,一旦轮到它来享用CPU 资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。执行下列语句时,线程就处于运行状态: Thread myThread = new MyThreadClass(); myThread.start(); 当一个线程处于可运行状态时,系统为这个线程分配了它所需的系统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行(Run
3、nable)状态。,13.1.2 线程的状态,中断(Not Runnable) 一个正在执行的线程可能被人为地中断,使其让出CPU的使用权,暂时中止自己的执行,进入阻塞状态。 进入中断状态的原因有如下几条: 调用了sleep() 方法; 调用了suspend() 方法; 为等候一个条件变量,线程调用wait() 方法; 输入输出流中发生线程阻塞。,13.1.2 线程的状态,死亡(Dead) 处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个,一个是正常运行的线程完成了它的全部工作,另一个是线程被提前强制性地终止。所谓死亡状态就是线程释放了实体,即释放分配给线程对象的内存。,13.1.3 多线程的实现方法,在Java中,创建线程的方法有两种:一种方法是通过创建Thread类的子类来实现,另一种方法是通过实现Runnable接口的类来实现,具体如下。 方法一:定义一个线程类,它继承线程类Thread并重写其中的方法run() . 重继承,用这种方法定义的类不能再继承其他父类。 方法二:提供一个实现接口Runnable的类作为一个线程的目标对象,在初始化一个Thread类或者Thr
4、ead子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体run() 。,13.2 通过继承Thread类实现多线程,通过继承Thread类实现多线程的方法是首先设计Thread的子类,然后根据工作需要重新设计线程的run方法,再使用start方法启动线程,将执行权转交给run。 例13-1 程序清单 TwoThreads_Test.java,13.2 通过继承Thread类实现多线程,仔细分析一下运行结果,会发现两个线程是交错运行的,感觉就像是两个线程在同时运行。但是实际上一台计算机通常就只有一个CPU,在某个时刻只能有一个线程在运行,而java语言在设计时就充分考虑到线程的并发调度执行。对于程序员来说,在编程时要注意给每个线程执行的时间和机会,主要是通过让线程睡眠的办法(调用sleep() 方法)来让当前线程暂停执行,然后由其他线程来争夺执行的机会。如果上面的程序中没有用到sleep() 方法,则就是第一个线程先执行完毕,然后第二个线程再执行完毕。所以用活sleep() 方法是学习线程的一个关键。,13.3 通过Runnable接口实现多线程,通过Runnable
《Java语言第13章 Java多线程机制》由会员梦**分享,可在线阅读,更多相关《Java语言第13章 Java多线程机制》请在金锄头文库上搜索。
数控加工工艺与编程——教学大纲.doc
Linux 应用基础教程--CH04_包管理与系统更新
Java语言第12章 图形用户界面设计
Java语言第3章 数据类型
C#程序设计实用教程第08章
《项目论证与评估》第十一章课件
哈里德课件 (23)
哈里德课件 (21)
高等数学6.2 定积分的物理应用
大学物理学第11章--电磁振荡 电磁波
大学物理学第7章--恒定电流的稳恒磁场
大学物理学第1章--质点运动学
Java语言第7章 接口和抽象
《项目论证与评估》第九章课件
《项目论证与评估》第一章课将
哈里德课件 (15)
哈里德课件 (1)
高等数学5.4 广义积分
Linux 应用基础教程--CH00_课前概说
C#程序设计实用教程第09章
2024-05-28 35页
2024-05-28 20页
2024-05-28 18页
2024-05-28 16页
2024-05-28 28页
2024-05-27 21页
2024-05-19 5页
2024-05-19 8页
2024-05-19 5页
2024-05-19 7页