Java线程和进程区别

Java线程和进程区别什么是进程,什么是线程?进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序至少一个进程,一个进程至少一个线程。进程线程的区别1、地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。2、…

大家好,又见面了,我是你们的朋友全栈君。

什么是进程,什么是线程?

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

一个程序至少一个进程,一个进程至少一个线程。

进程线程的区别

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、使用绑定连接。

以上就是有关进程和线程的总结,有什么好的意见欢迎大家留言。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159954.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 系统环境变量与用户环境变量区别_windows7建立用户变量

    系统环境变量与用户环境变量区别_windows7建立用户变量区别:  环境变量分为系统环境变量和用户环境变量。环境变量是指系统环境变量,对所有用户起作用,而用户环境变量只对当前用户起作用。  例如你要用opencv,那么你把opencv的bin目录加入到path变量下面,那么它就是系统环境变量,所用用户登陆,在命令行输入opencv都会有opencv的帮助信息出来。而如果你在某个用户的变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登陆时这

  • cmd中实现代码雨的命令。。。「建议收藏」

    cmd中实现代码雨的命令。。。「建议收藏」颜色修改时不能使用十六进制数@echoofftitledigitalraincolor0bsetlocalENABLEDELAYEDEXPANSIONfor/l%%iin(0)

  • ajax中设置header的Content-Type两种类型区别[通俗易懂]

    ajax中设置header的Content-Type两种类型区别[通俗易懂]post给服务器的数据类型是string,content-type有两种类型1、application/json发送给服务器的数据,会对数据进行JSON序列化2、application/x-www-form-urlencoded发送给服务器的数据,会将数据转化成querystring也就是说,content-type使用哪种类型,区别于服务器是怎么解析数据的。…

  • java实现贪吃蛇小游戏(源码+注释)

    java实现贪吃蛇小游戏(源码+注释)一.工程文件二.Main.javapackagecom.company;importjavax.swing.*;publicclassMain{publicstaticvoidmain(String[]args){//创建窗体对象JFrameframe=newJFrame();//创建窗体参数()frame.setBounds(10,10,900,720);//设置

  • 富文本编辑器kindeditor配置

    富文本编辑器kindeditor配置<!–富文本编辑器kindeditor配置↓–><linktype=”text/css”rel=”stylesheet”href=”kindeditor/themes/default/default.css”/><linkrel=”stylesheet”href=”kindeditor/plugins/code/prettify.cs…

    2022年10月12日
  • 看完了aspnetmvc nerdinner项目

    看完了aspnetmvc nerdinner项目这几天一直在看aspnetmvc-nerdinner这本书中的Nerdinner代码编写的全过程。其实觉得用最原始的办法:动手敲代码带给我们的好处比单纯的看然后Copy代码再运行要好的多,最起码加深了我们的记忆。前段时间看了ASP.NET网站上关于ASP.NETMVC编程的培训文章,觉得MVC挺强大的,然后就试着自己做了一个小项目,可是在做的过程中,很多东西确实见多人家怎么做,也知道大概…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号