程序: program是一个指令的集合
进程:process正在执行中的程序,由三部分组成:cpu, code, data。缺点:内存的浪费,cpu的负担
线程:是进程中一个“单一的连续控制流程”
进程占用资源,线程共享这些资源
一个进程中至少有一个线程,上限不设
一个进程中的线程共享相同的内存单元/内存地址空间----可以访问相同的变量和对象,而且它们从同一堆中分配对象----通信,数据,同步操作(进程中的线程共享代码和数据空间)
对于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也更快。
进程抢占到CPU资源后,每个线程再去抢占CPU资源,谁先抢占到就执行谁(所以每次的执行顺序都不一样)
线程结束进程未必结束,但进程结束线程一定结束。
多线程实现方法一:
1.继承Thread类
(1)需要继承Thread类
(2)必须要重写run方法,指的是核心执行的逻辑
(3)线程在启动的时候,不要直接调用run方法,而是要通过start()来进行调用
(4)每次运行相同的代码结果可能不同,原因在于多线程谁先抢占到资源谁运行,无法进行人为控制
2. 实现Runnable接口(使用了代理设计模式)(推荐这种,因为JAVA是单继承,将继承关系留给最需要的类)
(1)实现Runnable接口
(2)重写run方法
(3)创建Thread对象,将刚刚创建好的Runnable的子类实现作为thread的构造参数
(4)通过thread.start()进行启动
推荐使用第二种方式:
1.JAVA是单继承,将继承关系留给最需要的类
2.使用runnable接口之后不需要给共享变量添加static关键字,每次创建一个对象,作为共享对象即可。
(方便资源共享,同一份资源,多个代理访问)