简述线程,程序、进程的基本概念。以及他们之间关系是什么?
1. 简述线程,程序、进程的基本概念。以及他们之间关系是什么?
线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。
线程 是 进程 划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。
线程上下文的切换比进程上下文切换要快很多
- 进程切换时,涉及到当前进程的CPU环境的保存和新被调度运行进程的CPU环境的设置。
- 线程切换仅需要保存和设置少量的寄存器内容,不涉及存储管理方面的操作。
2. 线程有哪些基本状态?这些状态是如何定义的?
- 新建(new):新创建了一个线程对象。
- 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取cpu的使用权。
- 运行(running):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。
- 阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有 机会再次获得cpu timeslice转到运行(running)状态。阻塞的情况分三种:
- (一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放 入等待队列(waiting queue)中。
- (二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步 锁 被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
- (三). 其他阻塞: 运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
5.死亡(dead):线程run()、main()方法执行结束,或者因异常退出了run() 方法,则该线程结束生命周期。死亡的线程不可再次复生。
- 还没起床:sleeping
- 起床收拾好了,随时可以坐地铁出发:Runnable
- 等地铁来:Waiting
- 地铁来了,但要排队上地铁:I/O阻塞
- 上了地铁,发现暂时没座位:synchronized阻塞
- 地铁上找到座位:Running
- 到达目的地:Dead
- 使用线程可以把占据长时间的程序中的任务放到后台去处理。
- 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
- 程序的运行速度可能加快。
public class MyThread extends Thread {@Overridepublic void run() {super.run();System.out.println("MyThread");} }
Run.java
public class Run {public static void main(String[] args) {MyThread mythread = new MyThread();mythread.start();System.out.println("运行结束");} }
运行结果: 从上面的运行结果可以看出:线程是一个子任务,CPU以不确定的方式,或者说是以随机的时间来调用线程中的run方法。
③使用线程池
在《阿里巴巴Java开发手册》“并发处理”这一章节,明确指出线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。
为什么呢?
使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开销,解决资源不足的问题。如果不使用线程池,有可能会造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。
另外《阿里巴巴Java开发手册》中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险
- FixedThreadPool 和 SingleThreadExecutor : 允许请求的队列长度为 Integer.MAX_VALUE,可能堆积大量的请求,从而导致OOM。
- CachedThreadPool 和 ScheduledThreadPool : 允许创建的线程数量为 Integer.MAX_VALUE ,可能会创建大量线程,从而导致OOM。
6 线程的优先级
用户线程
守护线程
- 特点: 一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作
- 应用: 数据库连接池中的检测线程,JVM虚拟机启动后的检测线程
- 最常见的守护线程: 垃圾回收线程
- 两者最主要的区别在于:sleep方法没有释放锁,而wait方法释放了锁 。
- 两者都可以暂停线程的执行。
- Wait通常被用于线程间交互/通信,sleep通常被用于暂停执行。
- wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者notifyAll()方法。sleep()方法执行完成后,线程会自动苏醒。
转载于:https://www.cnblogs.com/cheng88/p/10397412.html
简述线程,程序、进程的基本概念。以及他们之间关系是什么?相关推荐
- 简述线程和进程的区别
1. 线程比进程更轻量,创建,销毁,调度线程都比进程更快. 2.一个进程至少包含一个线程,(即主线程). 3.进程和进程之间不共享空间,同一个进程的线程共享同一个内存空间. 4.进程之间存在父进程与子 ...
- 简述SOA和微服务的概念以及两者之间的关系和异同
SOA 面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件 ...
- 浅析微信头脑王者答题小程序源码功能模块与价格之间关系
随着移动互联网的发展,微信小程序开发日渐成熟.答题小程序头脑王者源码的出现大大的方便了人们的生活.也为部分企业带来了很大的利益,正是因为这样越来越多的企业都会选择去开发一个微信答题小程序自己以来更多的 ...
- 同步与异步以及线程与进程
写过爬虫的都知道,爬虫的性能瓶颈在于IO,因为爬虫是一个IO密集型业务,程序需要发起网络请求,必然就有IO阻塞, 通常请求一个URL耗时要几百毫秒到几秒不等,而我们的CPU处理速度惊人,两者的速度就好 ...
- 简述线程、程序、进程的基本概念。以及他们之间关系是什么?
线程与进程相似,但线程是一个比进程更小的执行单位.一个进程在其执行的过程中可以产生多个线程.与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切 ...
- 02 线程简介 多任务 多线程 普通方法调用和多线程 程序.进程.线程 Proces与Thread 核心概念
线程简介 任务,进程,线程,多线程 多任务 多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务 多线程 原来是一条路,慢慢因为车太多了,道路堵塞,效率极低. 为了提高使用的 ...
- [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
文章目录 线程概念 进程和线程的关系 线程的优点 线程的缺点 线程控制 Linux线程和接口关系的认识 线程创建 线程ID及进程地址空间布局 线程等待 线程终止 线程终止状态 线程分离 LWP和pth ...
- 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
文章目录 一.进程与线程 二.并发 三.线程间通信 四.Java 并发 3 特性 一.进程与线程 最开始是没有线程这个概念的 , 一个应用程序就是一个进程 , 应用程序运行时 , 如果还要处理与用户交 ...
- 1线程概念:线程和进程之间的关系,线程间可共享资源,线程间非共享资源,线程的优缺点
1线程概念 1.1什么是线程 1.1.2线程和进程的关系 1.轻量级进程(light-weightprocess),也有PCB,创建线程使用底层函数和进程一样,都是clone. 2.从内核里看进 ...
最新文章
- hololens离线安装包都收集齐了
- 每日一皮​:昨天晚上下班回家,一民警迎面巡逻而来。 突然对我大喊:站住!...
- java面试的题积累【持续更新中......】
- Django(part33)--数据库的迁移
- 三菱st语言编程实例_LD、FBD、IL、ST、SFC、CFC六种编程语言的特点
- 3c vrrp的接口监视_主备冗余协议,VRRP基础,状态机选举及VRRP配置,理论+实战...
- 信息学奥赛 数论专题 2、带 余 除 法
- 茄子快传 java,如何打造茄子快传这样一款Android应用(项目已完成,github)
- KD树(k-d tree)
- 为什么都敏捷开发了项目还会延期?!| 技术头条
- 有时候,一个人也挺好
- iptables 开放端口
- teststand 2020|ni teststand 2020(测试管理软件) 附安装教程
- 数学基础知识(2) 梯度和方向向量
- web前端面试题-1
- LibreOJ - 10015 扩散
- three相机在模型上_threejs学习心得(场景的搭建+运动模型导入)
- 用canvas画圆形雷达图
- 【VINS-Mono】Estimator::initialStructure
- 红旗linux如何开远程桌面,红旗Linux开启_ftp_telnet_远程桌面