北京大学JAVA讲义__第七章 多线程
- 格式:ppt
- 大小:172.50 KB
- 文档页数:46
Java多线程的基本原理什么是多线程在计算机科学中,线程是指进程中的一个执行流程。
一个进程可以有多个线程,每个线程都可以独立执行不同的任务。
多线程可以提高程序的并发性和响应性,使得程序能够同时处理多个任务。
Java是一种支持多线程编程的面向对象编程语言。
通过使用Java的多线程机制,可以实现并发执行的程序,提高程序的执行效率和性能。
多线程的优点和用途多线程编程可以带来以下几个优点:1.提高程序的执行效率:多线程可以让程序同时执行多个任务,从而提高程序的执行效率。
特别是在计算密集型任务和IO密集型任务中,多线程可以充分利用CPU和IO资源,提高程序的执行速度。
2.提高程序的响应性:多线程可以让程序同时处理多个任务,当一个任务需要等待IO操作完成时,可以切换到其他任务继续执行,保持程序的响应性。
3.提高代码的可维护性:多线程可以将复杂的任务拆分成多个小任务,每个小任务由一个线程独立执行,简化了程序的设计和实现。
多线程广泛应用于以下几个领域:1.Web服务器:通过使用多线程,可以同时处理多个客户端的请求,提高服务器的并发性能。
2.数据库管理系统:多线程可以同时处理多个数据库请求,提高数据库的并发性能。
3.游戏开发:多线程可以实现游戏中的多个角色同时执行,提高游戏的流畅度和响应性。
Java多线程的实现方式Java多线程可以通过两种方式来实现:1.继承Thread类:通过继承Thread类,并重写run()方法来实现多线程。
2.实现Runnable接口:通过实现Runnable接口,并实现run()方法来实现多线程。
这两种方式都可以实现多线程,但是使用实现Runnable接口的方式更加灵活,因为Java不支持多重继承,所以如果一个类已经继承了其他类,就无法再继承Thread类了,但是可以实现Runnable接口。
线程的生命周期在Java中,线程有以下几个状态:1.新建状态(New):当一个Thread对象被创建时,它就处于新建状态。
多线程是java应用程序的一个特点,掌握java的多线程也是作为一java 程序员必备的知识。
多线程指的是在单个程序中可以同时运行多个同的线程执行不同的任务.线程是程序内的顺序控制流,只能使用分配给序的资源和环境。
还记得刚开始学习的时候总是和进程分不清,总是对这两个名词所迷惑。
下面就首先对这两个名词区分来作为本篇博客的开始:一、线程与进程的区别多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. •线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。
多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。
从根本上说,这就是多线程编程的最终目的。
二、了解一下java在多线程中的基础知识1.Java中如果我们自己没有产生线程,那么系统就会给我们产生一个线程(主线程,main方法就在主线程上运行),我们的程序都是由线程来执行的。
2. 进程:执行中的程序(程序是静态的概念,进程是动态的概念)。
3. 线程的实现有两种方式,第一种方式是继承Thread类,然后重写run 方法;第二种是实现Runnable接口,然后实现其run方法。
4. 将我们希望线程执行的代码放到run方法中,然后通过start方法来启动线程,start方法首先为线程的执行准备好系统资源,然后再去调用run方法。
当某个类继承了Thread类之后,该类就叫做一个线程类。
5. 一个进程至少要包含一个线程。
6. 对于单核CPU来说,某一时刻只能有一个线程在执行(微观串行),从宏观角度来看,多个线程在同时执行(宏观并行)。
7. 对于双核或双核以上的CPU来说,可以真正做到微观并行。
三、Thread源码研究:1) Thread类也实现了Runnable接口,因此实现了Runnable接口中的run方法;2) 当生成一个线程对象时,如果没有为其设定名字,那么线程对象的名字将使用如下形式:Thread-number,该number将是自动增加的,并被所有的Thread对象所共享(因为它是static的成员变量)。
第7章多线程一、选择题1.线程调用了sleep()方法后,该线程将进入()状态。
A.可运行状态B.运行状态C.阻塞状态D.终止状态2.关于java线程,下面说法错误的是()A.线程是以CPU为主体的行为B.java利用线程使整个系统成为异步C.创建线程的方法有两种:实现Runnable接口和继承Thread类D.新线程一旦被创建,它将自动开始运行3.在java中的线程模型包含()A.一个虚拟处理器B.CPU执行的代码C.代码操作的数据D.以上都是4.在java语言中,临界区可以是一个语句块,或者是一个方法,并用()关键字标识。
A.synchronizedB.includeC.importD.Thread5.线程控制方法中,yield()的作用是()A.返回当前线程的引用B.使比其低的优先级线程执行C.强行终止线程D.只让给同优先级线程运行6.线程同步中,对象的锁在()情况下持有线程返回A.当synchronized()语句块执行完后B.当在synchronized()语句块执行中出现例外(exception)时C.当持有锁的线程调用该对象的wait()方法时D.以上都是7.在以下()情况下,线程就进入可运行状态A.线程调用了sleep()方法时B.线程调用了join()方法时C.线程调用了yield()方法时D.以上都是8.java用()机制实现了进程之间的异步执行A.监视器B.虚拟机C.多个CPUD.异步调用9.下列程序实现简单的线程调度,请回答以下问题:Thread myThread=new MyThreadClass();myThread.start();try{myThread.sleep(10000);}catch(InterruptedExceptione){}myThread.stop();程序执行完第一行后,线程进入________状态;程序执行完第二行后,线程进入________状态;程序开始执行第五行时,线程进入________状态;程序执行完第五行后,线程进入________状态;程序执行完第十行后,线程进入________状态;A.新建状态B.可运行状态C.阻塞状态D.终止状态10.Thread类的方法中,toString()方法的作用是()A.只返回线程的名称B.返回当前线程所属的线程组的名称C.返回当前线程对象D.返回线程的名称11.运行下列程序,会产生什么结果?()1) public class Exercises3_1 extends Thread implements Runable {2) public void run() {3) System.out.println("this is run()");4) }5) public static void main(String args[]) {6) Thread t = new Thread(new Exercises3_1());7) t.start();8) }9) }A.第一行会产生编译错误B.第六行会产生编译错误C.第六行会产生运行错误D.程序会运行和启动12.线程在生命周期中要经历五种状态,若线程当前是新建状态,则它可以到达的下一个状态是()。
第七章多线程7.1 多线程的概念多线程编程的含义是可将程序任务分成几个并行的子任务。
特别是在网络编程中,你会发现很多功能是可以并发执行的。
比如网络传输速度较慢,用户输入速度较慢,你可以用两个独立的线程去完成这个功能,而不影响正常的显示或其他功能。
多线程是与单线程比较而言的,普通的WINDOWS采用单线程程序结构,其工作原理是:主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是一个子函数,只有等这个子函数执行完返回后,主程序才能接收另外的消息来执行。
比如子函数功能是在读一个网络数据,或读一个文件,只有等读完这数据或文件才能接收下一个消息。
在执行这个子函数过程中你什么也不能干。
但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。
7.1.1 Java线程的模型Java的设计思想是建立在当前大多数操作系统都实现了线程调度。
Java虚拟机的很多任务都依赖线程调度,而且所有的类库都是为多线程设计的。
实时上,Java支持Macintosh 和Ms-dos 的平台; 所以迟迟未出来就是因为这两个平台都不支持多线程。
Java利用多线程实现了整个执行环境是异步的。
在Java程序里没有主消息循环。
如果一个线程等待读取网络数据,它可以运行但不停止系统的其他线程执行。
用于处理用户输入的线程大多时间是等待用户敲键盘或击鼠标。
还可以使动画的每一帧时间停顿一秒而并不使系统暂停。
一个线程启动后,它可以被挂起,暂时不让它执行。
挂起的线程可以重新恢复执行。
任何时间线程都可以被停止,被停止的线程就不能再重新启动。
Java语言里,线程表现为线程类,线程类封装了所有需要的线程操作控制。
必须很清晰地区分开线程对象和运行线程,你可以将线程对象看作是运行线程的控制面板。
在线程对象里有很多函数来控制一个线程是否运行,睡眠,挂起或停止。
线程类是控制线程行为的唯一的手段。