- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA多线程研讨
1、多线程的概念 Java语言的一个重要特性是支持多线程的程序设计,多线程是实现并发的一种有效手段 线程是一个能独立执行自身指令的控制流 一个程序中可以同时运行多个相对独立的线程,这样的程序称为多线程程序 操作系统将CPU的执行划分为非常小的时间片,根据一定的规则在不同的线程之间切换,使每个线程都得到执行的机会 2.进程与线程 进程(Process)是应用程序在内存环境中基本的执行单元。在Java 中,进程是有不同的地址空间且处在可执行状态中的应用程序。 线程(Thread)是指进程中某个单一的顺序控制流程。 进程与线程的重要区别之一在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中;每个进程都可以同时有执行不同任务的多个线程。 2.进程与线程 线程与进程区别之二在于二者的通信不同。进程可以创建子进程,父子进程拥有不同的可执行代码和数据内存空间,因此进程间通信复杂,可能需要管道、消息队列、共享内存或信号处理来保证进程间的通信,不仅费时而且有限。而一个进程中的各线程因为共享地址空间, 所以它们之间的通信是非常简单而有效的, 线程仅是过程调用,它们彼此独立执行,拥有独立的执行堆栈和程序执行上下文。 3、线程的状态 4、Java采用抢占式调度策略 下面几种情况下,当前线程会放弃CPU: ?(1)当前时间片用完; ?(2)线程在执行时调用了yield() 或sleep() 方法主动放弃; ?(3)进行I/O 访问,等待用户输入,导致线程阻塞;或者为等候一个条件变量,线程调用wait()方法; ??(4)有高优先级的线程参与调度。? 5、优先级策略 优先级高的先执行,优先级低的后执行 多线程系统会自动为每个线程分配一个优先级,缺省时,继承其父类的优先级 任务紧急的线程,其优先级较高 同优先级的线程按“先进先出”的原则 6、 Thread构造方法 public Thread (ThreadGroup group,Runnable target,String name); public Thread(); public Thread(Runnable target); public Thread(Runnable target,String name); public Thread(String name); public Thread(ThreadGroup group,Runnable target); public Thread(ThreadGroup group,String name);? 7、Thread类的主要方法 类 Object 的两个方法: ?void wait() :在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。? Void wait(long?timeout):在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。? Void wait(long?timeout, int?nanos):在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。 类 Object 的两个方法: Void notify():唤醒在此对象监视器上等待的单个线程。? Void notifyAll():唤醒在此对象监视器上等待的所有线程。 8、创建线程和执行线程(方法1) 从Thread类派生出一个子类,在类中一定要实现run() 8、创建线程和执行线程(方法2) Thread的构造方法中包含有一个Runnable实例的参数,必须定义一个实现Runnable接口的类并产生一个该类的实例,对该实例的引用就是适合于这个构造方法的参数 9、线程的调度 (1) sleep() 是静态方法,可以通过Thread.sleep(x)直接引用 x指定了线程再次启动前必须休眠的最小时间,毫秒为单位 可能引发中断异常InterruptedException,因此要进行捕获和处理 “最小时间”是因为这个方法只保证在一段时间后线程回到就绪态,至于它是否能够获得CPU运行,则要视线程调度而定,所以,通常线程实际被暂停的时间都比指定的时间要长。 9、线程的调度 (2) yield() :强制终止线程的执行,使相同优先级而当前处于等待状态的其他线程获得运行机会。 可以给其他同等优先级线程一个运行的机会 如果在就绪队列中有其他同优先级的线程,yield()把调用者放入就绪队列尾,并允许其他线程运行;如果没有这样的线程,则yield()不做任何工作 。 sle
文档评论(0)