java8多线程课件2016-xh.pptx
《java8多线程课件2016-xh.pptx》由会员分享,可在线阅读,更多相关《java8多线程课件2016-xh.pptx(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第八章第八章 多线程机制多线程机制 8.1 8.1 Java多线程机制多线程机制 (概念掌握,理解性内(概念掌握,理解性内容)容)8.2 多线程的实现方法(重点及难点)多线程的实现方法(重点及难点)8.3 多线程状态及调度(重点)多线程状态及调度(重点)8.4 线程同步线程同步8.5 线程通信线程通信n18.1 Java多线程机制多线程机制 8.1.1 线程的基本概念线程的基本概念线程的概念:线程就是应用程序中的一个可线程的概念:线程就是应用程序中的一个可执行线索,多线程就是同一个应用程序中有执行线索,多线程就是同一个应用程序中有多个可执行线索,它们可以并发执行。多个可执行线索,它们可以并发执
2、行。为什么要有多线程?为什么要有多线程?线程与进程的区别:线程与进程的区别:可否独立运行?可否独立运行?内存空间?内存空间?n2案例案例 用程序来模拟铁路售票系统,实现用程序来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的通过四个售票点发售某日某次列车的100100张车票,要求这四个售票点同时售张车票,要求这四个售票点同时售票。这就需要一个程序能够同时执行票。这就需要一个程序能够同时执行4 4个任务。个任务。n3所需要的知识点所需要的知识点什么是多线程什么是多线程如何实现多线程如何实现多线程如何调度和控制多线程如何调度和控制多线程n4多线程概述多线程概述 大大多多数数程程序序设设计计时
3、时,习习惯惯上上考考虑虑该该程程序序如如何何从从头头至至尾尾顺顺序序执执行行各各项项任任务务的的设设计计方方法法,即即一一个个程程序序只只有有一一条条执执行行路路线线。但但现现实实世世界界中中的的很很多多过过程程都都是是同同时时发发生生的的,对对应应这这种种情情况况,可可编编写写有有多多条条执执行行路路径径的的程程序序,使使得得程程序能够序能够同时执行多个任务同时执行多个任务。n5线程的基本概念线程的基本概念线线程程是是程程序序中中的的一一条条执执行行路路径径。多多线线程程是是指程序中包含多条执行路径。指程序中包含多条执行路径。在在一一个个程程序序中中可可以以同同时时运运行行多多个个不不同同的
4、的线线程来执行不同的任务。程来执行不同的任务。n6 多线程基本概念多线程基本概念n7多线程的例子多线程的例子浏览器程序浏览器程序聊天程序聊天程序n8v 进程进程:简单地说,在多任务系统中,每个独立执行的:简单地说,在多任务系统中,每个独立执行的程序称为进程,也就是程序称为进程,也就是“正在运行的程序正在运行的程序”。v 线程线程:进程中程序代码的一个执行序列。线程并不是进程中程序代码的一个执行序列。线程并不是程序,它自己本身并不能运行,必须在程序中运行。程序,它自己本身并不能运行,必须在程序中运行。在在一个程序中可以实现多个线程,这些线程同时运行,完一个程序中可以实现多个线程,这些线程同时运行
5、,完成不同的功能。成不同的功能。进程与线程进程与线程n9线程与进程的区别线程与进程的区别进程和线程相比,主要有以下区别:进程和线程相比,主要有以下区别:两者的粒度不同,是两个不同层次上的概念。两者的粒度不同,是两个不同层次上的概念。进程是由操作系统来管理的,而线程则是在一进程是由操作系统来管理的,而线程则是在一个程序(进程)内。个程序(进程)内。不同进程的代码、内部数据和状态都是完全独不同进程的代码、内部数据和状态都是完全独立的,而一个程序内的多线程是共享同一块内立的,而一个程序内的多线程是共享同一块内存空间和同一组系统资源,有可能互相影响。存空间和同一组系统资源,有可能互相影响。线程本身的数
6、据通常只有寄存器数据,以及一线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。进程切换的负担要小。n10多线程编程的优点多线程编程的优点减轻编写交互频繁、涉及面多的程减轻编写交互频繁、涉及面多的程序的困难序的困难程序的吞吐量会得到改善程序的吞吐量会得到改善由多个处理器的系统由多个处理器的系统,可以并发运行可以并发运行不同的线程。不同的线程。(否则否则,任何时刻只有任何时刻只有一个线程在运行一个线程在运行)n12多线程机制一个建立线程的例子:public class SimpleRunnable imple
7、ments Runable private String message;public static void main(String args)SimpleRunnable r1=new SimpleRunnable(Hello);Thread t1=new Thread(r1);t1.start();public SimpleRunnable(String message)this.message=message;public void run()for(;)System.out.println(message);线程开始执行时,它在public void run()方法中执行。该方法是定
8、义的线程执行起点,像应用程序从main()开始一样。首先main()方法构造SimpleRunnable类的实例。实例有自己的一个String数据,初始化为Hello。由实例r1传入Thread类构造器,这是线程运行时处理的数据。执行的代码是实例方法run()。n138.2 多线程的实现方法多线程的实现方法 重点与要点:重点与要点:两种实现方法两种实现方法创建创建Thread子类子类生成一个类,声明实现生成一个类,声明实现Runnable接口接口n14创建创建Thread类的子类类的子类用这种方法生成新线程,可以按以下步骤进行:1.生成Thread类的子类。class MyThread ext
9、ends Thread2.在子类中覆盖在子类中覆盖run()方法。方法。public void run()3.生成子类的对象,并且调用生成子类的对象,并且调用start()方法启动新线程。方法启动新线程。MyThread thread=new MyThread();thread.start();start()方法将调用run()方法执行线程。n15实现Thread子类方法的多线程示例class FirstThread extends Thread class FirstThread extends Thread public void run()public void run()try try
10、 System.out.println(First thread starts System.out.println(First thread starts running.);running.);for(int i=0;i6;i+)for(int i=0;i6;i+)System.out.println(First +i);System.out.println(First +i);sleep(1000);sleep(1000);System.out.println(First thread finishes System.out.println(First thread finishes r
11、unning.);running.);catch(InterruptedException e)catch(InterruptedException e)n16实现Thread子类方法的多线程示例class SecondThread extends Thread class SecondThread extends Thread public void run()public void run()try try System.out.println(tSecond thread starts System.out.println(tSecond thread starts running.);
12、running.);for(int i=0;i6;i+)for(int i=0;i6;i+)System.out.println(tSecond +i);System.out.println(tSecond +i);sleep(1000);sleep(1000);System.out.println(tSecond thread finishes System.out.println(tSecond thread finishes running);running);catch(InterruptedException e)catch(InterruptedException e)n17实现T
13、hread子类方法的多线程示例public class ThreadTest1 public ThreadTest1()FirstThread first=new FirstThread();SecondThread second=new SecondThread();first.start();second.start();public static void main(String args)new ThreadTest1();结果为:结果为:First thread starts running.First 0 Second thread starts running.Second 0F
14、irst 1 Second 1First 2 Second 2First 3 Second 3First 4 Second 4First 5 Second 5First thread finishes running.Second thread finished.n18Thread子类线程小结子类线程小结(加深理解加深理解)需要深入理解线程的需要深入理解线程的run()以及以及start()方法方法:start()方法将调用方法将调用run()方法执行线程。方法执行线程。run()方法就是新线程完成具体工作的地方。方法就是新线程完成具体工作的地方。注意通过对比加深了解注意通过对比加深了解:u程
15、序的入口,程序的入口,main()方法。方法。u线程的入口,线程的入口,run()方法。方法。uApplet的入口,的入口,init()方法。方法。n19案例的实现案例的实现现在我们试着编程来模拟铁路售票系现在我们试着编程来模拟铁路售票系统。通过四个售票点发售某日某次列统。通过四个售票点发售某日某次列车的车的100100张车票,一个售票点用一个张车票,一个售票点用一个线程来表示。用创建线程来表示。用创建ThreadThread类的子类类的子类实现多线程。实现多线程。n20class SailThread extends Threadstatic int x=0;int bh;public Sa
16、ilThread(int n)bh=n;public void run()while(x=99)try(“第第”+bh+“号窗口正在号窗口正在卖出第卖出第+(+x)+张票张票);sleep(500);catch(InterruptedException e)n21class TestSailThread public static void main(String args)SailThread t1=new SailThread(1);SailThread t2=new SailThread(2);SailThread t3=new SailThread(3);SailThread t4=n
17、ew SailThread(4);t1.start();t2.start();t3.start();t4.start();n22n238.多线程实现方法多线程实现方法2实现实现Runnable接口接口什么是什么是Runnable接口接口?a)Runnable是是java.lang包中的一个接口。包中的一个接口。b)b)定义了创建和执行线程的功能。定义了创建和执行线程的功能。c)c)定义了定义了run()方法,完成具体任务的地方。方法,完成具体任务的地方。n24实现实现Runnable接口接口实现实现Runnable接口的接口的主要步骤:主要步骤:定义一个类实现定义一个类实现Runnable接口
18、,接口,class FirstThread implements Runnable class FirstThread implements Runnable 并且在该类中实现并且在该类中实现run()方法。方法。public void run()生成这个类的对象。生成这个类的对象。FirstThread first=new FirstThread();FirstThread first=new FirstThread();用用Thread(Runnable target)构造函数生成构造函数生成Thread对象,然后调用对象,然后调用start()方方法启动线程。法启动线程。Thread t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java8 多线程 课件 2016 xh
限制150内