文档详情

《Java高级程序设计》课件——学习情境6 Java多线程与同步机制.pptx

发布:2025-03-08约5.29千字共103页下载文档
文本预览下载声明

;一、应用场景

二、线程和多线程的概念

三、线程的定义、创建和启动

四、线程的生命周期、状态及状态之间的转换

五、线程的优先级设置

;3;多线程的常见应用场景:

(1)后台任务,例如:耗时或大量占用处理器的任务,定时向大量(100w以上)的用户发送邮件;

(2)异步处理,例如:发微博、记录日志等;

(3)并发运行,例如:视频解码,音频解码,网络解码等等;

(4)分布式计算,例如:在两个或多个软件间互相共享信息。;二、线程及多线程的概念;多线程(Multithreading):是指从软件或者硬件上实现多个线程并发执行的技术。

并发(Concurrency):一个进程可以由多个线程组成,即在一个进程中可以同时运行多个不同的线程,他们分别执行不同的任务。当进程内的多个线程同时运行时,这种运行方式被称为并发运行。;三、线程的定义、创建和启动;定义一个继承Thread类的子类,并重写该类的run()方法。;定义Runnable接口的实现类,并重写该接口的run()方法。;线程实现了Runnable接口后还可以继承其他的类。

采用继承Thread类,就不能再继承其他类。因为Java只支持单一继承。;3.2线程的创建;首先创建Runnable实现类的实例,再以此实例作为Thread的构造函数里的target参数来创建Thread对象,该Thread对象才是真正的线程对象。;3.3线程的启动;四、线程的生命周期、状态及状态之间的转换;这是线程的生命周期图;在生命周期中有各种各样的状态,这些状态之间也可以相互转换。;线程的状态;一个线程可以在给定时间点处于一个状态。

同一时刻,线程有且仅有其中的一种状态。

RUNNABLE状态包括了操作系统线程状态中的Running和Ready。

这些状态是不反映任何操作系统线程状态的虚拟机状态。;线程状态间的转换;状态的转换如图1-2所示;用new关键字创建一个线程对象后,该线程对象就处于新生状态(NEW)。;线程通过调用start方法进入可运行状态(RUNNABLE)。

处于可运行状态的线程已经具备了运行条件,但还没有分配到CPU,进入线程就绪队列,等待系统为其分配CPU。;处于可运行状态的线程,如果获得了CPU的调度,就会从可运行状态变为运行状态,执行run()方法中的任务。

处于运??状态的线程最为复杂,它可以变为可运行状态、阻塞状态、等待状态、超时等待状态和终止状态。;阻塞状态是线程等待锁的状态。当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchronized(同步),获取不到锁标记,将会立即进入锁池状态

线程从阻塞状态只能进入就绪状态,无法直接进入运行状态。;等待状态;超时等待状态;终止状态;五、线程的优先级设置;线程优先级的设置;Thread类常用方法;小结;;一、任务描述

二、任务分析、设计

三、任务实施

四、运行结果;35;二、任务分析、设计;其类图如图6-1所示。;1.分别使用继承Thread类、实现Runable接口两种方式定义两个线程。

2.在测试主类的main方法中创建两个线程的对象,然后启动,观察结果。

3.通过线程的调度来改变线程的状态,观察结果。

4.使用Thread的getPriority()、setPriority()获取、设置线程的优先级。;三、编码实现;定义杨辉三角形线程PascalTriangleThread;定义斐波那契数列线程FibonacciThread;创建线程,即创建线程类的对象;FibonacciThreadft=newFibonacciThread();

Threadt=newThread(ft);;启动线程;从运行结果上可以看到创建的多个线程是交替执行的,这就体现了线程的并发性。;3.2通过线程的调度查看线程的状态;publicvoidrun(){

//TODOAuto-generatedmethodstub

try{

printFibonacci();

waitForASecond();//在新线程中运行waitForASecond()方法

waitForYears();//在新线程中运行waitForYears()方法

}catch(InterruptedExceptione){

e.printStackTrace();

}

};//1.查看新建线程时的状态

FibonacciThreadf1=newFibonacciThread();

Threadft1=newThread(f1);

System.out.println(新建线程时的状态:+ft1.getSta

显示全部
相似文档