欢迎来到天天文库
浏览记录
ID:6075094
大小:233.12 KB
页数:18页
时间:2018-01-02
《javase_09_多线程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1、纲要a)多线程的基本概念b)线程的创建和启动c)线程的生命周期d)线程的调度e)线程控制f)线程的同步g)守护线程h)定时器的使用i)Windows的任务计划2、内容2.1、多线程的基本概念线程指进程中的一个执行场景,也就是执行流程,那么进程和线程有什么区别呢?u每个进程是一个应用程序,都有独立的内存空间u同一个进程中的线程共享其进程中的内存和资源(共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的。)1.什么是进程?一个进程对应一个应用程序。例如:在windows操作系统启动QQ就表示启动了一个进程。在java的开发环境下启动JVM,就表示启动了一个进程。现代的
2、计算机都是支持多进程的,在同一个操作系统中,可以同时启动多个进程。2.多进程有什么作用?单进程计算机只能做一件事情。玩电脑,一边玩游戏(游戏进程)一边听音乐(音乐进程)。对于单核计算机来讲,在同一个时间点上,游戏进程和音乐进程是同时在运行吗?不是。因为计算机的CPU只能在某个时间点上做一件事。由于计算机将在“游戏进程”和“音乐进程”之间频繁的切换执行,切换速度极高,人类感觉游戏和音乐在同时进行。多进程的作用不是提高执行速度,而是提高CPU的使用率。进程和进程之间的内存是独立的。3.什么是线程?线程是一个进程中的执行场景。一个进程可以启动多个线程。4.多线程有什么作用?5多线程不是
3、为了提高执行速度,而是提高应用程序的使用率。线程和线程共享“堆内存和方法区内存”,栈内存是独立的,一个线程一个栈。可以给现实世界中的人类一种错觉:感觉多个线程在同时并发执行。5.java程序的运行原理?java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,表示启动了一个进程。该进程会自动启动一个“主线程”,然后主线程去调用某个类的main方法。所以main方法运行在主线程中。在此之前的所有程序都是单线程的。分析一些程序启动几个线程?publicclassThreadTest{publicstaticvoidmain(String[]args){m1();}publ
4、icstaticvoidm1(){m2();}publicstaticvoidm2(){m3();}publicstaticvoidm3(){System.out.println("m3......");}}以上程序只要一个线程,就是主线程。main、m1、m2、m3这四个方法在同一个栈空间中。没有启动其他任何线程。2.2、线程的创建和启动Java虚拟机的主线程入口是main方法,用户可以自己创建线程,创建方式有两种:u继承Thread类u实现Runnable接口(推荐使用Runnable接口)Thread类中创建线程最重要的两个方法为:upublicvoidrun()upubl
5、icvoidstart()采用Thread类创建线程,用户只需要继承Thread,覆盖Thread中的run方法,父类Thread中的run方法没有抛出异常,那么子类也不能抛出异常,最后采用start启动线程即可【示例代码】,不使用线程publicclassThreadTest01{publicstaticvoidmain(String[]args){Processorp=newProcessor();p.run();method1();}privatestaticvoidmethod1(){System.out.println("--------method1()-------
6、---");}}5classProcessor{publicvoidrun(){for(inti=0;i<10;i++){System.out.println(i);}}}以上顺序输出相应的结果(属于串行),也就是run方法完全执行完成后,才执行method1方法,也就是method1必须等待前面的方法返回才可以得到执行,这是一种“同步编程模型”。1、继承Thread类:【代码示例】,使用线程publicclassThreadTest02{publicstaticvoidmain(String[]args){//创建线程Threadt=newProcessor();//手动调用该
7、方法//不能采用run来启动一个场景(线程),//run就是一个普通方法调用//t.run();//start不是马上执行线程,而是使线程进入就绪,告诉JVM分配一个新栈给t//线程的真正执行是由Java的线程调度机制完成的//启动线程p.start();//只能启动一次//p.start();method1();//有了多线程后,main方法结束只是在主线程中没有栈帧了。//但是其他线程或其他栈中还是栈帧仍在执行//main方法结束后程序可能还在运行}privatestatic
此文档下载收益归作者所有