javake课件第8章java线程

javake课件第8章java线程

ID:36209369

大小:405.50 KB

页数:60页

时间:2019-05-07

javake课件第8章java线程_第1页
javake课件第8章java线程_第2页
javake课件第8章java线程_第3页
javake课件第8章java线程_第4页
javake课件第8章java线程_第5页
资源描述:

《javake课件第8章java线程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章Java线程学习导读本章将介绍Java线程编程技术,以及多线程的同步和互斥。第8章Java线程线程基础线程的生命多线程共享数据多线程的互斥和同步本章小结线程的概念多任务:计算机在看上去几乎同一时间内运行多个程序。多线程:单个程序内部也可以在同一时间进行多种运算。一个线程是一个程序内部的顺序控制流。不是程序,自己本身不能运行,必须在程序中运行。如何在一个程序内部实现多个线程。线程和进程每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序

2、计数器(PC),线程切换的开销小。多进程:在操作系统中,能同时运行多个任务(程序)。多线程:在同一应用程序中,有多个顺序流同时执行。线程的概念模型虚拟的CPU,封装在java.lang.Thread类中。CPU所执行的代码,传递给Thread类。CPU所处理的数据,传递给Thread类。线程体Java的线程是通过java.lang.Thread类来实现的。当我们生成一个Thread类或者它的子类的对象后,一个新的线程就诞生了。每个线程都是通过某个特定Thread对象的方法run()来完成其操作的,方法run()称为线程体。线程的

3、状态唤醒挂起,睡眠或等待创建状态(newThread)ThreadmyThread=newMyThreadClass();可运行状态(Runnable)//非运行态ThreadmyThread=newMyThreadClass();myThread.start();这一状态并不是运行中状态(Running),因为也许线程并未真正执行,只有被调度执行时,才真正处于运行状态。不可运行状态(NotRunnable,Blocked)调用了sleep()方法;//此时线程的run()方法将中断执行调用了suspend()方法;//挂起线程

4、,不推荐使用为等候一个条件变量,线程调用wait()方法;I/O处发生线程阻塞;//I/O阻塞对于上面四种情况,都有可以返回可运行态的方法与之对应。1.sleep()方法中的参数为休息时间,单位为毫秒,时间过去后,线程即为可运行的。//不是运行态,需再次被调度2.一个线程调用suspend()方法后,只能有其它线程调用它的resume()方法恢复。3.如果一个线程等待条件变量,如果要停止等待,需要条件变量所在的对象调用notify()或者notifyAll()方法。4.特定的I/O指令完成,结束不可运行状态。死亡状态(Dead)

5、线程的终止一般可通过两种方法实现:自然撤销(线程执行完)或是被停止(调用stop()方法,不推荐使用)。自然撤销是线程的run()方法正常退出。如下面的程序:publicvoidrun(){inti=0;for(i=0;i<10;i++){System.out.println(i);}}t.start();//t是一个线程……..//省略了一些语句t.stop();//调用stop()终止线程其它注意事项1.非法状态处理对于任何状态,如果调用的方法和状态不符,都会引起非法状态处理。例如,线程刚创建后,只能调用start()或者s

6、top()方法,如果调用其它方法就会引起非法状态处理。2.isAlive()方法在类Thread中提供了方法isAlive(),如果线程已经启动(start),但是未终止(dead),返回true,反之,返回false,表示该线程未启动,或者已终止。如果isAlive()方法返回true,不能区分是可运行态(runnable)还是不可运行态(notrunnable)。顺序执行(单线程)程序publicclassSequentialDemo{publicstaticvoidmain(String[]args){newSequent

7、ial(“C").run();newSequential(“D").run();}}classSequential{Stringname=null;publicSequential(Stringn){name=n;}publicvoidrun(){for(inti=0;i<5;i++){try{//睡眠一段随机时间Thread.sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){e.printStackTrace();}System.out.print(

8、name);}}}每次总输出结果:CCCCCDDDDD线程体的构造(1)publicThread();//创建一个线程对象(2)publicThread(Runnabletarget);//参数target的run()方法将被线程对象调用(3)publicThr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。