欢迎来到天天文库
浏览记录
ID:49199943
大小:237.50 KB
页数:16页
时间:2020-03-01
《java多线程基础入门.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1多线程概述•多线程引入•把备注部分的代码通过画图解释一下调用流程。这个程序只有一个执行流程,所以这样的程序就是单线程程序。•假如一个程序有多条执行流程,那么,该程序就是多线程程序。-接下来我们来看看到底什么是多线程•publicclassDemo{•publicstaticvoidmain(String[]args){•〃代码1•show();•〃代码2•}•publicstaticvoidshow(){•〃代码11•methodi();•method2();•〃代码22•}•publicstaticvoidmethodi(){•〃代码111…•}•publicstatic
2、voidmethod2(){•〃代码222…•}•}■多线程概述-进程:•正在运行的程序,是系统进行资源分配和调用的独立单位。•每一个进程都有它自己的内存空间和系统资源。•编呈:•是进程中的单个顺序控制流,是一条执行路径•一个进程如果只有一条执行路径,则称为单线程程序。•一个进程如果有多条执行路径,则称为多线程程序。•举例扫雷游戏,迅雷下载等1:要想说线程”首先必须得聊聊进程,因为线程是依赖于进程存在的。2:那么,什么是进程呢?通过任务管理器我们就可以看到进程的存在。给出一个概念:进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统
3、资源。3:多进程有什么意义呢?单进程计算机只能做一件事情。而我们现在的计算机都可以一边玩游戏(游戏进程),一边听音乐(音乐进程),所以我们常见的操作系统都是多进程操作系统。t匕如:Windows,Mac和Linux等,能在同一个时间段内执行多个任务。对于单核计算机来讲,游戏进程和音乐进程是同时运行的吗?不是。因为CPU在某个时间点上只能做一件事情,计算机是在游戏进程和音乐进程间做着频繁切换,且切换速度很快,所以,我们感觉游戏和音乐在同时进行,其实并不是同时执行的。多进程的作用不是提高执行速度,而是提高CPU的使用率。4:那么什么又是线程呢?在一个进程内部又可以执行多个任务”而
4、这每一个任务我们就可以看成是一个线程。线程是程序中单个顺序的控制流,是程序使用CPU的基本单位。5:多线程有什么意义呢?多线程的作用不是提高执行速度,而是为了提高应用程序的使用率。而多线程却给了我们一个错觉:让我们认为多个线程是并发执行的。其实不是。因为多个线程共享同一个进程的资源(堆内存和方法区),但是栈内存是独立的,一个线程一个栈。所以他们仍然是在抢CPU的资源执行。一个时间点上只有能有一个线程执行。而且谁抢到,这个不一定,所以,造成了线程运行的随机性。6:那么什么又是并发呢?大家注意两个词汇的区别:并行和并发。前者是逻辑上同时发生,指在某一个时间内同时运行多个程序。后者
5、是物理上同时发生,指在某一个时间点同时运行多个程序。那么,我们能不能实现真正意义上的并发呢,是可以的,多个CPU就可以实现,不过你得知道如何调度和控制它们。请7:那么,我们来举例说说什么是进程,什么是线程。扫雷游戏,迅雷下载等。2java运行原理■Java程序运行原理•java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个"主线程",然后主线程去调用某个类的main方法。所以main方法运行在主线程中。在此之前的所有程序都是单线程的。•思考:•jvm虚拟机的启动是单线程的还是多线程的?•1:JVM启动至少启动了垃圾回收
6、线程和主线程,所以是多线程的。3多线程的实现方案1•通过查看API来学习多线程程序的实现•参考Thread类•继承Thread类•步骤及代码演示•几个小问题:•为什么要重写run()方法•启动线程使用的是那个方法•线程能不能多次启动•run()和start()方法的区别4如何获取和设置线程名称•Thread类的基本获取和设置方法•publicfinalStringgetName()•publicfinalvoidsetName(Stringname)•其实通过构造方法也可以给线程起名字•思考:•如何获取main方法所在的线程名称呢?•publicstaticThreadcur
7、rentThread()•这样就可以获取任意方法所在的线程名称5线程调度假如我们的计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。那么Java是如何对线程进行调用的呢?•线程有两种调度模型:•分时调度模型所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片•抢占式调度模型优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一些。•Java使用的是抢占式调度模型。
此文档下载收益归作者所有