第10章 java 多线程编程.doc
《第10章 java 多线程编程.doc》由会员分享,可在线阅读,更多相关《第10章 java 多线程编程.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10章 多线程2总体概要2相关知识2学习重点2内容框架210.1多线程的概念210.1.1程序、进程和多任务3(一).程序(program)3(二)多任务310.1.1线程310.1.2多线程310.1.3线程的生命周期与多线程机制4(一)线程的生命周期与状态4(二)java的多线程机制410.2创建线程410.2.1通过继承Thread类创建线程4(一)Thread类的构造方法4(二)Thread类的常用方法5(三)继承Thread类创建线程510.2.2通过实现Runnable接口创建线程7(一)Runnable接口方法7(二)实现Runn Thread和Runnable实现线程8(三)
2、 Thread和Runnable实现线程的比较910.3线程的状态转换910.4线程的优先级与调度1010.4.1线程的优先级10(一)Thread类定义了基本3个常数11(二)线程先优级的使用1110.4.2线程的的状态12(一)挂起一个线程12(二)停止一个线程12(三)线程睡眠12(四)线程等待12(五)线程让步13(六)线程加入13(七)线程唤醒1310.5线程的同步1310.6何时使用多线程及注意问题1410.7小结1410.8习题15第10章 多线程总体概要l 了解多线程的概念:程序,进程和多任务l 撑握线程的生命周期l 理解java的多线程机制l 熟练撑握实现线程两种方法:Thr
3、ead类和Runnable接口以有这两种方法的区别l 熟练撑握Thread类的构造方法和常用方法l 线程优先级和线程调度l 能自己写出自己的多线程程序l 使用线程注意事项相关知识l 线程优先级l 线程的转换l 并发与并行学习重点l 线程的生命周期l 线程的两种方法的实现l 线程之间的状态转换内容框架软件多任务程序线程进程多线程多线程概念相关概念创建线程线程的状态转换Runnable接口线程的优先级,调度,同步Thead类10.1多线程的概念本章介绍java语言的多线程编程的相关知识,java提供了十分强大的多线程实现机制,它使得编程人员可以方便地编写多线程应用程序。在一个应用程序中可以包含多个
4、线程,每一个线程都具有特定的程序功能,并且可以与其他线程并发执行,java提供了Tread类和Runnable接口为多线程提供支持。首选为大家介绍多线程编程的基本概念,以及与多线程有关的概念,如程序,进程,多任务等。10.1.1程序、进程和多任务(一).程序(program)程序是对数据描述与操作的代码的集合,是应用程序执行的脚本进程(process)是程序的一次执行过程,是操作系统运行程序的基本单位,程序是静态的,进程是动态的。系统运行一个程序就是一个进程从创建、运行到消亡的过程。(二)多任务多任务是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每一个任务对应一个进行。例如,你
5、一在Window操作系统中打开QQ程序,也打开Word,Eclipse程序。【注意】一个CPU在同一时刻只能执行一个程序的一条指令,实际上,多任务运行的并发机制这些任务交替运行,因间隔时间短,所以你感觉就是多个程序在同时运行。10.1.1线程线程又称为轻量级进程,它是控制线程(thread of control)的缩写.它和进程一样拥有独立的执行控制,由操作系统负责调度,运行一个程序时,程序内部的代码都是按顺序先后执行的,如果能够将一个进程划分为更小的单位,则程序中一些彼此相对独立的代码段可以重叠运行,将会获得更高的执行效率,线程主是解决这个问题.线程是比进程更小的运行单位,是程序中单个顺序的
6、流控制,一个进程中可以包含多个线程。线程是一种特殊的多任务方式,当一个程序执行多线程时,可以运行两个或更多的的同一个程序启动的任务。这样,一个程序可以使得多个活动任务同时发生.。线程与任何一个程序一样有一个开始,一系列可执行的命令序列, 一个结束。在执行的任何时刻,只有一个执行点。线程与程序不周的是线程本身不能运行,它只能包含在程序中,只能在程序中执行。一个线程在程序运行时,必须争取到为自己分配的系统资源,如执行堆栈、程序计数器,等等。10.1.2多线程单个线程没有什么特别的意义,真正有用的是具有多线程的程序.多线程是相对于单线程而言的,指的是在一个程序中可以定义多个线程并发同时运行它们,每个
7、线程可以执行不同的任务。与进程不同的是,同类多线程共享一块内存空间和一组系统资源,所以,系统创建多线程开销相对较小。因此,也称线程为国负荷进程。多线程和伟统的线程在程序设计上最大区别在于,由于各个线程的控制流彼此独立,使行多个线程之间的代码是可以按照任何合理的顺序的执行,由此带来了线程的调度和同步问题.多线程和多任务是两个既有联系又有区别的概念。多任务是针对操作系统而言的,代表着操作系统可以同时执行的程序个数;多线程是针对一个程序而言,代表着一个进程内部可以同时执行的线程个数,而每个线程可以完成不同的任务。多程线的执行是并发的,并发不同于并行,并行是指两个线程并行执行,互不干涉,则并行是指宏观
8、上的“并行”,微观上的“分时复用”,如果系统只有一个CPU,那么真正的并行是不可能的,但是由于CPU的速度非常快,如果采用时间片轮转的方法,用户即可从宏观上感觉多个线程是在“并行” 执行.10.1.3线程的生命周期与多线程机制(一)线程的生命周期与状态线程同进程一样,一个线程也有创建,运行到消亡的过程,这一个过程称为线程的生命周期,使用线程的状态表明线程处于生命周期的哪个阶段。线程有创建(new)、可运行(Runnable)、运行中(Running)、挂起(NotRunnable)、死亡(Dead)5个状态,通过线程的控制和调度可使线程在这几种状态转化。Java语言是利用内在支持多线程,而其它
9、大部分计算机编程语言都是利用外部软件实现的多线程。Java的每一个程序自动拥有一个线程 ,称为主线程。当程序加载到内存时,启动主线程。要加载其它线程,程序就要便 用Thread类或Runnable接口。(二)java的多线程机制java.lang中的线程类Thread封装了所有需要的线程控制,有很多方法用来控制一个线程的运行、休眠、挂起或停止。这就是java的多线程机制。使用java的多线程机制编程可将程序的任务分解为几个并行的子任务,通过线程并发招待来加速程序运行,提 高CPU的利用率。例如,在网總编程囊,有很多功能可以并发执行,网络传输带度一般较慢,用户输入速度也较慢,你可以设计两下独立线
10、程分别完成这两个任务鸸不影响政党的显示或期货功能。在编写动画程序时,你可以用一个线程进行延时,让另一个线程在延时中准备要显示的画面,心实现完美 的动画 显示.10.2创建线程实现多线程的两个方法:通过继承线程类Thread来创建线程类;实现Runnable 接口的类来创建线程。下面分别对这两种方法进行讲解.10.2.1通过继承Thread类创建线程(一)Thread类的构造方法 Thread()分配新的 Thread 对象 Thread(Runnabletarget)分配新的 Thread 对象 Thread(Runnabletarget, Stringname)分配新的 Thread 对象
11、Thread(Stringname)分配新的 Thread 对象 Thread(ThreadGroupgroup, Runnabletarget)分配新的Thread 对象 Thread(ThreadGroupgroup, Runnabletarget, Stringname) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员 Thread(ThreadGroupgroup, Runnabletarget, Stringname, longstackSize)分配新的 Thread 对象,以便将 tar
12、get 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈尺寸 Thread(ThreadGroupgroup, Stringname)分配新的 Thread对象。(二)Thread类的常用方法 Public static int activeCount()返回当前线程的线程组中活动线程的数目。 Pubilc String getName()返回该线程的名称。 Pubic int getPriority()返回线程的优先级。 Pubic void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable
13、 对象的 run 方法;否则,该方法不执行任何操作并返回。 Public void interrupt()中断线程。 Public void join(longmillis)等待该线程终止的时间最长为millis 毫秒。 Publi void setPriority(intnewPriority)更改线程的优先级, 超时为 0 意味着要一直等下去。 Public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 Public static void yield()暂停当前正在执行的线程对象,并执行其他线程。(三)继承Thread类创建线程【例10.1】在程
14、序中通过继承Thread类创建一个线程子类SonThread,通过TestThread主类同时运行两个线程对象thread1 和thread2,TestThread.java,代码如下所示:package bedeck;import javax.swing.*;import java.awt.*;import java.awt.event.*;/* * application程序 * */public class TestThread extends JFrame implements ActionListenerTextField jtf = new TextField();JLabel j
15、lb = new JLabel(开始按扭即可启动两个线程);JButton jb = new JButton(开始);static String state = ; /记录程序的启动情况/* * 实现两个线程 * */public TestThread()super(线程实例);this.setSize(320, 240);this.setLayout(null);jb.addActionListener(this); /添加单击事件this.add(jlb);jlb.setBounds(10, 10, 190, 20);this.add(jb);jb.setBounds(210, 10, 9
16、0, 20);this.add(jtf);jtf.setBounds(10, 50, 290, 80);this.setVisible(true);/* * main()方法 * */public static void main(String a)new TestThread();/* * 实现actionListener接口 * */public void actionPerformed(ActionEvent e)SonThread st1 = new SonThread(Thread1);SonThread st2 = new SonThread(Thread2);jtf.setTex
17、t();st1.start();st2.start();jtf.setText(state);class SonThread extends Threadpublic SonThread(String str)super(str); /调用父类的构造public void run()for(int i = 0 ; i3 ; i+)TestThread.state += n+getName() + 在运行n;trysleep(500); /休眠500毫秒确定那个线程在运行TestThread.state += n+ getName()+在休眠n;catch(InterruptedExceptio
18、n e)System.out.println(+e);说明:mian方法是application应用程序起点,main()方法本身也是一个线程,是程序自动拥有的一个线程,称为主程序,Start()方法启动用户创建的两个线程。用户可从结果看出两个线程的名字是交替显示,这是因为两个线程同步的。创建线程其实就是设计run方法,一旦启动线程对象,就进入run方法,便执行run中的所有语句,run方法执行完毕,这个线程也就结束了。InterruptedException,当线程在很长一段时间内一直处于正在等待、休眠或暂停状态,而另一个线程用 Thread 类中的 iterrupt 方法中断它时,抛出该异
19、常。运行结果如10-1所示10-1 Thread类创建线程【注意】用sleep语句进行休眠线程交不占用CPU,基他线程可以继续运行,当休眠被唤醒。继续执行下面的语句继承Thread创建的子类,必须覆盖run()方法10.2.2通过实现Runnable接口创建线程由于java只支持单继承,如果当一个类继承了其他类的时,这时您就不能通过Thread类来创建线程,而是使用Runnable接口来实现(一)Runnable接口方法run() 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。(二)实现Runn Thread和Runnable
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 java 多线程编程 10 多线程 编程
限制150内