何为进程:
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。当一个程序被运行, 从磁盘加载这个程序的代码至内存, 这时就开启了一个 进程。进程就可以视为程序的一个实例。站在操作系统的角度, 进程是程序运行资源分配(以内存为主)的最小单位。
何为线程:
线程必须依赖于进程而存在,线程是进程中的一个实体,是 CPU 调度和分 派的基本单位,它是比 进程更小的、能独立运行的基本单位。线程自己基本上不 拥有系统资源 , ,只拥有在运行中必不可少的资源( 如程序计数器 , 一组寄存器和栈 ), 但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 一个进程可 以拥有多个线程, 一个线程必须有一个父进程。线程, 有时也被称为轻量级进程 ( LWP ),早期 Linux 的线程实现几乎就是复用的进程,后来 才独立出自己的 API。 新启线程有几种方式?官方说法是在 Java 中有两种方式创建一个线程用以执行, 一种是派生自 Thread 类,另一种是实现 Runnable 接口。
其实Java创建线程有很多种方式啊,像实现Runnable、Callable接口、继承Thread类、创建线程池等等,不过这些方式并没有真正创建出线程,严格来说,Java就只有一种方式可以创建线程,那就是通过new Thread().start()创建。
而所谓的Runnable、Callable……对象,这仅仅只是线程体,也就是提供给线程执行的任务,并不属于真正的Java线程,它们的执行,最终还是需要依赖于new Thread()……
深入理解 run() 和 start()? Thread 类是 Java 里对线程概念的抽象,可以这样理解:我们通过 new Thread() 其实只是 new 出一 个 Thread 的实例,还没有操作系统中真正的线程挂起钩来。 只有执行了 start() 方法后,才实现了真 正意义上的启动线程。 从 Thread 的源码可以看到, Thread 的 start 方法中调用了 start0() 方法,而 start0() 是个 nati ve 方 法, 这就说明 Thread#start 一定和操作系统是密切相关的。 start() 方法让一个线程进入就绪队列等待分配 cpu ,分到 cpu 后才调用实现 的 run() 方法, start() 方 法不能重复调用,如果重复调用会抛出异常。而 run 方法是业务逻辑实现的地方, 本质上和任意一个类的任意一个成员方 法并没有任何区别, 可以重复执行,也可以被单独调用。 标签:Java,Thread,创建,start,线程,进程 From: https://blog.csdn.net/qq_51182288/article/details/139216270