欢迎来到天天文库
浏览记录
ID:38566164
大小:286.01 KB
页数:25页
时间:2019-06-15
《java核心课件-第12章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第12章线程了解线程在其生命周期中状态的转换;会用两种方法熟练创建线程;能熟练运用同步12.1线程和进程现代操作系统都支持多任务,主要有两种形式:基于线程和基于进程;从本质上说,进程就是独立运行的程序,有独立的指令序列,独立的数据空间和资源;线程则是依附于进程存在的独立的指令序列,一个进程中可以有多个线程。这些线程共享进程的数据和资源,线程有独立的生命周期;因为没有存储空间的交换,线程间的切换优于进程,因此尽量用多线程。Java中线程分为:用户线程和守护线程,特点如下:用户线程可以转换为守护线程,转换时机只有在新建态和终止态进行;守护
2、线程运行于系统后台,一般是为用户线程服务,用户线程运行于系统前台,当所有的用户线程都终止时,JVM会杀死守护线程。单线程实例classSingleThread{privateStringid;publicSingleThread(Stringstr){id=str;}publicvoidrun(){for(inti=0;i<4;i++){for(intj=0;j<100000000;j++);System.out.println(id+"isrunning..");}}}classTest{publicstaticvoidmain(S
3、tringargs[]){SingleThreaddog=newSingleThread("doggy");SingleThreadcat=newSingleThread("kitty");dog.run();cat.run();}}12.2线程的状态及其生命周期就绪运行死亡阻塞休眠等待start()notify()I/O结束yield()I/O请求stopt()run()结束wait()sleep()notifyAll()分派新建新建态:用new语句创建一个Thread对象时。该状态的线程不会立即被执行,但会分配系统资源;就绪态:当
4、线程调用start方法后,CPU会为其分配相应的时间,这时线程就绪了;运行态:当线程内的代码块开始执行时,该线程便开始运行。一旦线程开始运行,它不必始终保持运行状态,因此很多书中把就绪态和运行态统称为可运行状态;阻塞/挂起态:有人调用该线程的sleep()方法;该线程调用了wait方法;该线程试图锁定一个当前被另一个线程锁定了的对象;有人调用了该线程的suspend方法;终止状态:由于run方法的正常退出而自然死亡;没有抓取到的异常事件终止了run方法的执行,从而导致线程突然死亡;有人调用了该线程的stop方法。12.3线程的优先级对
5、新建的线程通常继承其父类的优先级。用户可以通过setPriority方法来修改系统自动设定的线程优先级。线程优先级的使用原则是与系统有着密切关系的,当JVM取决于主机平台的线程机制时,线程的调度完全受线程机制的支配。12.4线程的创建Thread类:它是线程类的超类,它是一个线程有生命周期,继承它的类本身也是一个线程;Runnable接口:它只定义了线程的行为,由实现其run方法来实现,但它没有线程的生命周期,实现它的类本身不是一个线程;启动线程时,都应调用线程的start方法。12.4.1继承Thread类覆盖其run方法,其余方法
6、继承Thread的classMultThreadextendsThread{privateStringid;publicMultThread(Stringstr){id=str;}publicvoidrun(){for(inti=0;i<4;i++){for(intj=0;j<100000000;j++);System.out.println(id+"isrunning..");}}}classTest{publicstaticvoidmain(Stringargs[]){MultThreaddog=newMultThread("do
7、ggy");MultThreadcat=newMultThread("kitty");dog.start();cat.start();}}注意在上页的程序代码中,不能直接调用run方法,这样只是把run方法运行一遍而已,并没有激活线程。正确的方式是调用由Thread类继承而来的start方法,然后由这个方法在计划表(scheduler)中登录这个线程,最后这个线程开始运行时,run方法自然会被调用。不管是继承Thread创建线程,还是实现Runnable接口创建线程,都应该调用start方法启动线程;由结果可以看出,这两个线程是一起运
8、行的。但哪一个字符串先出现则不一定,看谁抢到CPU的资源。12.4.2实现Runnable接口classRunnableThreadimplementsRunnable{privateStringid;publicRun
此文档下载收益归作者所有