java 进程描述_java 进程和线程
什么是进程,什么是线程?
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。
进程线程的区别:
1、地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
2、资源拥有:同一进程内的线程共享本进程的资源,但是进程之间的资源是独立的。
3、一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
4、进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
5、执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
6、线程是处理器调度的基本单位,但是进程不是。
7、两者均可并发执行。
优缺点:
线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。
进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。
什么地方会用到多线程?
1、后台线程:比如定期执行一些特殊任务,如定期更新配置文件,任务调度,一些监控用于定期信息采集等。
2、最典型的应用比如tomcat,tomcat内部采用的就是多线程,上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用到我们的servlet程序,比如doGet或者doPost方法。还有就是需要异步处理的时候,需要使用多线程。
3、特别耗时的操作,如备份数据库,可以开个线程执行备份,然后执行返回,前台不断向后台询问线程执行状态。
多线程有几种实现方法?有什么区别?
实现多线程有两种方式:(自JDK1.5之后有三种,最后一种并不常用)
1.继承Thread类
2.实现Runnable接口(Callable接口)
一个类如果实现了Runnable接口或者继承了Thread类,那么它就是一个多线程类,如果是要实现多线程,还需要重写run()方法,所以run() 方法是多线程的入口。
多线程的两种实现方式的区别:
1.Thread是Runnable接口的子类,实现Runnable接口的方式解决了Java单继承的局限
2.Runnable接口实现多线程比继承Thread类更加能描述数据共享的概念
多线程有几种实现同步方法?
同步的实现方面有两种,分别是synchronized,wait与notify
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
产生死锁的原因?
产生死锁的四个必要条件:
1、互斥条件:一个资源每次只能被一个进程使用。
2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3、不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
避免死锁
上面列出了死锁的四个必要条件,我们只要想办法破其中的任意一个或多个条件,就可以避免死锁发生,一般有以下几种方法:
1、按同一顺序访问对象。
2、避免事务中的用户交互。
3、保持事务简短并处于一个批处理中。
4、使用较低的隔离级别。
5、使用基于行版本控制的隔离级别。
6、使用绑定连接。
以上就是有关进程和线程的总结,有什么好的意见欢迎大家留言。
java 进程描述_java 进程和线程相关推荐
- mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查
一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多.  二.定位故障 根据这 ...
- 算法java语言描述_java语言描述数据结构与算法崔笑颜的博客
java语言描述数据结构与算法崔笑颜的博客 冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找package com.demo.test; import java.util.Arra ...
- java 进程消失_Java进程诡异消失问题
最新在Centos 7.6上起了一个新的Jboss,并在其中起了我们的server,但是在使用arthas的过程中发现一个问题. [root@tmsprod4 ~]# java -jar arthas ...
- java共享内存_Java进程通信之映像文件共享内存
Java进程通信之映像文件共享内存 1. 共享内存 vs 进程通信 对UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种.但windows实际上只有影像文件共享内存一种. 而说到进程通信 ...
- java 生产者消费者_Java多线程:线程间通信—生产者消费者模型
一.背景 && 定义 多线程环境下,只要有并发问题,就要保证数据的安全性,一般指的是通过 synchronized 来进行同步. 另一个问题是, 多个线程之间如何协作呢 ? 我们看一个 ...
- java runnable 启动_Java多线程:线程的创建与启动
# 面试题: Java中创建线程有几种方式. 不同的创建方式有什么区别. 如何启动一个线程. # Java中创建线程的方式 JDK源码中的描述:两种 image.png 第一种是继承Thread类,重 ...
- java 封闭类型_Java并发之线程封闭
读者们好! 在这篇博客中,我们将探讨线程封闭是什么意思,以及我们如何实现它. 所以,让我们直接开始吧. 1. 线程封闭 大多数的并发问题仅发生在我们想要在线程之间共享可变变量或可变状态时.如果在多个线 ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- java类描述_java笔记2:Java语言中的类和对象的描述
在Java 语言中,除8 个基本数据类型值之外, 一切都是对象,而对象就是面向对象程序设计的中心. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还 ...
最新文章
- 软件体系架构模式之三微内核体系架构
- 这 23 道题,全世界的数学家花费 100 年时间,只解答了一半
- linux日志系统分析:rsyslog、syslog、klog
- Ubuntu16.04 配置pytorch
- Django中过滤的实现
- c# list 求交使用注意点
- java script 教程_Java Script入门
- CSS 实现图片横向拖动
- jq鼠标移入移除事件
- dockerfile安装yum_Docker镜像-基于DockerFile制作yum版nginx镜像
- SVM学习(续)核函数 松弛变量和惩罚因子
- 使用postman测试接口
- (王道408考研操作系统)第四章文件管理-第一节8:文件保护
- jQuery点击图片弹出大图遮罩层
- 自动驾驶——目标检测(Camera传感器)的学习笔记
- bug-Both weights and assigned values must be a sequence of numbers when assigning to values of <clas
- Security+ 学习笔记52 风险管理
- 在 Mac OS X 安装gcc编辑环境,make不能用时参考
- #洛谷oj:P2024 [NOI2001] 食物链
- whale 帷幄:数字化营销运营 全渠道数字化精益营销管理平台
热门文章
- 网站刷关键词_中小企业网站排名如何做SEO优化 - 刷百度关键词排名
- 找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字
- js input复选框选中父级同时子级也选中_突破百度JS反爬获取百度文库数据下载...
- 火力发电厂与变电站设计防火规范_2019年《建筑设计防火规范》新版征求意见稿...
- cudnn7.6.5下载 solitairetheme8_.NET Framework 3.5 开启方法及微软官方原版下载
- 电子白板技术_电子白板种类介绍及产品功能概述
- 伪造谷歌安全类的钓鱼邮件案例
- mysql隔离级别 简书_数据库事务和四种隔离级别
- Leetcode-435:无重叠区间
- 可以直接考信息系统项目管理师吗