邹瑞20201019
总结
并发和并行
并行:指两个或多个事件在同一时刻发生(同时执行)。
并发:指两个或多个事件在同一个时间段内发生(交替执行)。
注意:单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并 发运行。同理,线程也是一样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却 是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行 多个线程,我们把这种情况称之为线程调度。
进程和线程
进程
进程( Process )是指正在运行的程序,如 QQ ,是程序一次动态执行过程。它对应了从代码加载、执行 并执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。操作系统同时管理一 个计算机系统中的多个进程,让计算机系统中的多个进程轮流使用CPU资源,或者共享资源。
特点:
进程是系统运行的基本单位
每一个进程都有自己独立的空间、一组系统资源
每一个进程内部数据和状态都是完全独立的
每一个应用程序运行时都会产生一个进程
线程
线程是进程中执行运算的最小单位,一个进程在其执行过程中可以产生多个线程,而线程必须在某个 进程内执行。
线程是进程内部的一个执行单元,是可以完成一个独立任务的顺序控制流程。一个进程中至少有一个 线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
进程和线程的区别
进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线 程。
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小的多。
多线程
多线程程序是扩展了多任务的概念:一个程序同时执行多个任务。通常,每一个任务称为一个线程 ( Thread ),它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序 ( Multithreaded )。
多线程和多进程的区别
本质的区别在于每个进程拥有自己的一套变量,而线程则是共享数据。线程之间共享数据是有风险的 (后边分析),然而共享变量使线程之间的通信比进程之间通信更有效、更容易。此外,在有的操作系 统中,与进程相比,线程更"轻量级",创建、撤销一个线程比启动新的进程开销要小的多。
线程调度
- 分时调度 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
- 抢占式调度 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性), Java 使用的为抢占式调度。
创建线程类
每个程序至少自动拥有一个线程,称为主线程。当程序加载到内存时启动主线程。 java 程序中 public static void main(String[] args) 是主线程的入口,运行 java 程序时会执行这个方法。
创建一个新的执行线程有两种方法。 一个是将一个类声明为 Thread 的子类。 这个子类应该重写 Thread 类的方法 run 。 然后可以分配并启动子类的实例。
使用Thread类
java.lang.Thread 类代表线程。每个线程的作用是完成一定的任务,实际上就是执行一段程序流即 一段顺序执行的代码。 Java 使用线程执行体来代表这段程序流。
public class Thread implements Runnable
创建线程
继承 Thread 类,并重写 run() 方法。
构造方法
Thread 中常用的构造方法有:
public Thread() :分配一个新的线程对象。
public Thread(String name) :分配一个指定名字的新的线程对象。
public Thread(Runnable target) :分配一个带有指定目标新的线程对象。 public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定 名字。
近期评论