进程与线程
应用程序可以由多个进程。
进程的内存空间是独立的,堆栈不共享。
线程共享进程内的内存空间,线程可以自由切换(每个线程有自己的栈空间,共用一份堆内存)
任何进程一定会包含至少一个线程,一个执行路径。
线程的调度
前提:计算机自身有多个处理器
如何让多个线程共享处理器:分时调度、抢占式调度(看起来好像是同时执行,用户无法感知,java使用抢占式调度)
同步与异步
线程安全(同步、排队执行、效率低)、线程不安全(异步、效率高、不安全)
并发与并行
并发:指定时间段内同时间发生
并行:同一刻同时执行
Thread
继承Thread类,需要重写方法run(),其实就是一段新的执行路径
Thread对象的方法start(),自动执行run()的内容
每个线程有自己的栈空间,因此每个线程执行的方法都会入栈,然后再出栈
Runnable接口
自定义类实现接口Runnable,重写run方法
创建方式与前面不同,只需要创建一个自定义类,将对象作为参数,创建一个Thread对象
与继承Thread的方式相比,具有以下优点:
- 可以实例一个对象,赋给多个Thread,任务与线程是分离的
- 避免单继承的局限性(JAVA中只单继承,继承了Thread后无法继承