============================================
本次笔记结合郝斌老师和马士兵老师的线程部分作总结笔记
============================================
1).程序
所谓程序,是一个严格有序的指令集合。程序规定了完成某一个任务时,计算机所需做的各种操作,以及这些操作的执行顺序。
单道程序设计环境是指:计算机中除了操作系统之外,只存在一个用户程序,及用户程序独享整个计算机资源
单道程序的特点:
1.资源的独占性:任何时候,位于内存中的程序可以使用系统中的一切资源,不可能有其他程序与之竞争。
2.执行的顺序性:内存中每次只有一个程序,各个程序是按次序执行的,即执行完一个,在执行下一个
3.结果的再现性:只要执行环境和初始条件相同,重复执行一个程序,获得的结果总是一样的。
多道程序设计是指:计算机中除了操作系统之外,存在多个用户程序,这些程序同时运行
多道程序设计有如下特点:
1.间断性:由于资源共享和合作,并发程序间相互制约,造成合作执行间断。
2.失去封闭性:程序执行收外界影响。
3.不可再现性:重复执行时,可能得到不同的结果。
程序本身只是一组指令的有续集合,它本身没有任何运行的含义,它只是一个静态的实体。
2)进程
进程的由来:一方面为了保持程序“是一个在时间上严格有序的指令集合,是静态的保存在存储介质上”这个概念的原有含义,另一方面为了刻画多个程序共同运行时呈现出的这些特征,在操作系统上,以“程序”为基础,又引入了“进程”这一个新的概念!
也即“为了使程序能并发执行,且为了对并发执行的程序加以描述,所以人们引入了进程”。
进程是程序在某个数据集上的执行。是一个动态的实体。
3)线程
线程是一个程序内部的顺序控制流。
线程和进程的区别:
1.每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有教程的开销。
2.线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。
3.多进程:在操作系统中能同时运行多个任务(程序)。
4.多线程:在同一个应用程序中有多个顺序流通时执行。
多线程的优势:
编程简单,效率高(能直接共享数据和资源,多进程不能),适用于开发服务程序(如web服务,聊天服务等)。
4)创建线程
方法一:
创建一个集成Thread的类(假定类名为T),并重写Thread中的run()方法
构造一个A类对象,假定对象名为t
调用t对象的start()方法[start方法是从Thread类继承过来的]
注意的问题:
Thread中的start()方法的功能就是创建一个新的线程,并自动调用该线程的run()方法,直接调用run()方法是不会创建一个新的线程的。
执行一个线程实际上就是执行该线程的run方法的代码。
执行完 t.start();之后并不表示t所对应的的线程就一定会立即得到执行,t.start();执行完后只是表示t线程具有了可以立即被cpu执行的资格,但由于想抢占cpu执行的线程很多,cpu并不一定会立即去执行t所对应的的线程
一个Thread对象能且只能代表一个线程,一个Thread对象不能调用两次start() 方法,否则会抛抛出java.lang.lllegalThreadStateException异常。
方法二:
定义一个实现了Runnable接口的类,假定为R
创建T类对象a,代码如下
R r = new R();
利用 r 构造一个Thread对象tt
Thread tt = new Thread(r);
调用tt中的start()方法
tt.start();
Thread的常用方法
5).线程状的控制
状态切换图
线程控制的基本方法图
线程优先级
sleep方法的介绍