程序:为完成特定任务、用某种语言编写的一组指令的集合。指一段静态的代码。
进程:是程序的一次执行过程,或是正在运行的一个程序。程序是静态的,进程是动态的。进程是资源分配的单位。
线程:是一个程序内部的一条执行路径。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器。
并行:多个cpu同时执行多个任务(每个人同时做不同的事)
并发:一个cpu同时执行多个任务(多个人做同一件事)
多线程的优点:
- 提高应用程序的响应
- 提高cpu的利用率
- 改善程序结构
使用多线程的原因:
- 程序需要同时执行两个或多个任务
- 程序需要实现一些需要等待的任务
- 需要一些后台运行的程序
多线程的创建:
- 继承于thread类
1.1创建一个继承于thread类的子类
1.2重写thread类的run()
1.3创建thread子类的对象
1.4通过此对象调用start() - 实现Runnable接口的方式
2.1创建一个实现了Runnable接口的类
2.2实现类去实现Runnable中的抽象方法:run()
2.3创建实现类的对象
2.4将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
2.5通过Thread类的对象调用start()
thread中的常用方法:
- start():启动当前线程;调用当前线程的run()
- run():通常需要重写thread类中的子方法,将创建的线程执行的操作声明在此方法中
- currentThread():静态方法,返回执行当前代码的线程
- getName():获取当前线程的名字
- setName():设置当前线程的名字
- yield():释放当前CPU的执行权
- join():在线程a中调用线程b的join(),此时线程a进入阻塞状态,知道线程b完全执行完以后,线程a才结束阻塞状态
- stop():已过时,当执行此方法时,强制结束当前线程
- sleep(long milltime):让当前线程"睡眠"指定的millitime毫秒,在指定的millitime毫秒时间内,当前线程时阻塞状态
- isAlive():判断当前线程是否存活
比较创建线程的两种方式:
开发中优先选择实现Runnable接口的方式
原因:
实现的方式没有类的单继承性的局限性
实现的方式更适合来处理多个线程有共享数据的情况
联系:public class Thread implements Runnable
相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。