进程和线程

何为进程:

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。当一个程序被运行, 从磁盘加载这个程序的代码至内存, 这时就开启了一个 进程。进程就可以视为程序的一个实例。站在操作系统的角度, 进程是程序运行资源分配(以内存为主)的最小单位。

何为线程:

线程必须依赖于进程而存在,线程是进程中的一个实体,是 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 方法是业务逻辑实现的地方, 本质上和任意一个类的任意一个成员方 法并没有任何区别, 可以重复执行,也可以被单独调用。
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值