欢迎来到天天文库
浏览记录
ID:36209369
大小:405.50 KB
页数:60页
时间:2019-05-07
《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
此文档下载收益归作者所有