java线程Thread详解_第1页
java线程Thread详解_第2页
java线程Thread详解_第3页
java线程Thread详解_第4页
java线程Thread详解_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、线程 一线程:线程是一个并发执行的顺序流,一个进程包括多个顺序执行流程,这执行流程称为线程。 线程是一个操作系统创建并维护的一个资源,对操作系统来说JVM就是一个进程。 对于单个CPU系统来说,某一个时刻只可能由一个线程在运行。 一个Thread对象就表示一个线程。 线程由三部分组成: (1).CPU分配给线程的时间片 (2).线程代码(写在run方法中) (3).线程数据 main()也是一个线程,但不是守护线程。 垃圾回收也是一个线程,且是守护线程。实现方式 二.线程有两种实现方式: 第一种方式: class MyThread extends Thread public void run(

2、) /.需要进行执行的代码,如循环。 class TestThread public static void main(Stringargs) Thread t1=new MyThread(); t1.start(); 只有等到所有的线程全部结束之后,进程才退出。实现方式 第二种方式:通过接口实现继承第二种方式:通过接口实现继承 class MyThread implements Runnable public void run() /.需要进行执行的代码,如循环。需要进行执行的代码,如循环。 class TestThread public static void main(Stringarg

3、s) Runnable target=new MyThread(); Thread t3=new Thread(target); t3.start();/启动线程,启动线程, 线程状态 三三线程中的线程中的7 种非常重要的状态:种非常重要的状态: 初始初始New、可运、可运行行Runnable、运行、运行Running、阻塞、阻塞Blocked、 锁池锁池lock_pool、等待队列、等待队列wait_pool、结束、结束Dead 有的书上认为只有五种状态:将有的书上认为只有五种状态:将“锁池锁池”和和“等待队列等待队列”都看成是都看成是“阻塞阻塞”状态的特殊情况:这种认识也是正确状态的特殊情

4、况:这种认识也是正确的的。将将“锁池锁池”和和“等待队列等待队列”单独分离出来有利于对程单独分离出来有利于对程序的理解。序的理解。 - 可运行可运行 -? 运行运行 - t.start()启动启动 IO.wait() - 锁池锁池 - 等待队列等待队列 获得锁标志获得锁标志 synchronized(o)线程状态1. 程序通过程序通过Thread t = new Thread(),调用,调用t.start()启动一个启动一个线程,使该线程进入可运行线程,使该线程进入可运行(Runnable)的状态。的状态。2. 由由JVM的决定去调度的决定去调度(Scheduler) 在可运行状态(在可运行状

5、态(Runnable)下的线程)下的线程,使该线程处于运行使该线程处于运行 (Running) 状态状态,由于由于JVM的调度会出现不可控性,即不是优先级高的先被调用,可能的调度会出现不可控性,即不是优先级高的先被调用,可能先调用,也可能后调用的的情况。运行状态先调用,也可能后调用的的情况。运行状态(Running)下,调用下,调用礼让礼让yield()方法,可以使线程回到可运行状态方法,可以使线程回到可运行状态(Runnable)下,再下,再次次JVM的调度(并不依赖优先级)。的调度(并不依赖优先级)。3. 线程在线程在Running的过程中可能会遇到阻塞的过程中可能会遇到阻塞(Blocke

6、d)情况情况调用调用join()和和sleep()方法,方法,sleep()时间结束或被打断,时间结束或被打断,join()中断中断,IO完成都会回到完成都会回到Runnable状态,等待状态,等待JVM的调度。的调度。调用调用wait(),使该线程处于等待池,使该线程处于等待池(wait blocked pool),直到直到notify()/notifyAll(),线程被唤醒被放到锁池,线程被唤醒被放到锁池(lock blocked pool ),释放同步锁使线程回到可运行状态(,释放同步锁使线程回到可运行状态(Runnable)对对Running状态的线程加同步锁状态的线程加同步锁(Syn

7、chronized)使其进入使其进入(lock blocked pool ),同步锁被释放进入可运行状态同步锁被释放进入可运行状态(Runnable)。4. 线程线程run()运行结束或异常退出,线程到达死亡状态运行结束或异常退出,线程到达死亡状态(Dead)。sleep和wait sleep和和wait的区别有:的区别有: 1,类:这两个方法来自不同的类分别是,类:这两个方法来自不同的类分别是Thread和和Object 2,锁:最主要是,锁:最主要是sleep方法没有释放锁,而方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同方法释放了锁,使得其他线程可以使用同步控制块或者方法

8、。步控制块或者方法。 3,域:,域:wait,notify和和notifyAll只能在同步控只能在同步控制方法或者同步控制块里面使用,而制方法或者同步控制块里面使用,而sleep可可以在任何地方使用以在任何地方使用 synchronized(x) x.notify() /或者或者wait() 4,异:,异:sleep必须捕获异常,而必须捕获异常,而wait 中中,notify和和notifyAll不需要捕获异常不需要捕获异常 5,停:其实两者都可以让线程暂停一段时间,停:其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制但是本质的区别是一个线程的运行状态控制,一一个是线程

9、之间的通讯的问题个是线程之间的通讯的问题 notify():唤醒一个处于等待状态的线程,注意唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由某一个等待状态的线程,而是由JVM确定唤醒确定唤醒哪个线程,而且不是按优先级。哪个线程,而且不是按优先级。 notifyAll():唤醒所有处唤醒所有处于于等待状态的线程,注等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。让它们竞争。 jion() :在一个线程中调用另一线程的在一个线程中调用另一线程的j

10、ion()方方法,表示将本线程阻塞到另一线程终止后在执法,表示将本线程阻塞到另一线程终止后在执行;行; 1、关于线程设计,下列描述正确的是、关于线程设计,下列描述正确的是 A. 线程对象必须实现线程对象必须实现 Runnable 接口接口 B. 启动一个线程直接调用线程对象的启动一个线程直接调用线程对象的 run()方法方法 C. Java 提供对多线程同步提供语言级的支提供对多线程同步提供语言级的支持持 D. 一个线程可以包含多个进程一个线程可以包含多个进程 2.、有关线程的哪些叙述是对的、有关线程的哪些叙述是对的 A)一旦一个线程被创建,它就立即)一旦一个线程被创建,它就立即 开始运行。开始运行。 B)使用)使用 start()方法可以使一个线程成方法可以使一个线程成 为可运行的为可运行的,但是它不一定立即开始运行。但是它不一定立即开始运行。 C)当一个线程因为抢先机制而停止运)当一个线程因为抢先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论