全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java中进程与线程_三种实现方式总结(必看篇)

一:进程与线程

概述几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程。当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程

进程进程是指处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配和调度的一个单位。当程序进入内存运行时,即为

进程的三个特点:

1:独立性:进程是系统中独立存在的实体,它可以独立拥有资源,每一个进程都有自己独立的地址空间,没有进程本身的运行,用户进程不可以直接访问其他进程的地址空间。

2:动态性:进程和程序的区别在于进程是动态的,进程中有时间的概念,进程具有自己的生命周期和各种不同的状态

3:并发性:多个进程可以在单个处理器上并发执行,互不影响

并发性和并行性是不同的概念:并行是指同一时刻,多个命令在多个处理器上同时执行;并发是指在同一时刻,只有一条命令是在处理器上执行的,但多个进程命令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果

注:

线程:

线程是进程的组成部分,一个进程可以拥有多个线程而一个线程必须拥有一个父进程线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源。它与父进程的其他线程共享该进程的所有资源

线程的特点:

线程可以完成一定任务,可以和其它线程共享父进程的共享变量和部分环境,相互协作来完成任务。

线程是独立运行的,其不知道进程中是否还有其他线程存在。

线程的执行是抢占式的,也就是说,当前执行的线程随时可能被挂起,以便运行另一个线程。

一个线程可以创建或撤销另一个线程,一个进程中的多个线程可以并发执行。

二、线程的创建及使用

java使用Thread类代表线程,所有的线程对象都必须是Thread或者其子类的实例,每个线程的作用是完成一定任务,实际上是就是执行一段程序流(一段顺序执行的代码)

方案一:继承Thread类创建线程类

步骤:① 定义Thread类的子类 并重写该类的Run方法,该run方法的方法体就代表了该线程需要完成的任务

② 创建Thread类的实例,即创建了线程对象

③ 调用线程的start方法来启动线程

结论:使用继承子Thread类的子类来创建线程类时,多个线程无法共享线程类的实例变量(比如上面的i)

方案二:实现Runnable接口

①定义Runnable接口的实现类,并重写它的Run方法,run方法同样是该线程的执行体

创建Runnable实现类的实例,并将此实例作为Thread的target创建一个Thread对象,该Thread对象才是真正的线程对象

调用start方法启动该线程

结论:采用Ruunable接口的方式创建多个线程可以共享线程类的实例变量,这是因为在这种方式下,程序创建的Runnable对象只是线程的target,而多个线程可以共享一个target,所以多个线程可以共享一个实例变量

通过Runnable实现多线程其实就是将run包装成线程的执行体,但是目前java无法将任意方法包装成线程执行体

方案三:使用callable和future创建线程Java5开始,Java提供 Callable接口,Callable接口提供了一个call()方法可以作为线程执行体,看起来和Runnable很像,但call()方法更强大——call()方法可以有返回值、call()方法可以抛出异常

Java5提供了Future接口来代表Callable接口的call()方法的返回值,并Future接口提供了一个FutureTask实现类,该实现类实现类Future接口,也实现了Runnable接口——可以作为Thread的target。

实现步骤:

①创建Callable接口的实现类,并实现call方法,call方法会成为线程执行体,且call方法具有返回值,在创建callable接口的实现类!

②使用FutrueTask类来包装Callable对象,FutrueTask封装类Callable的call方法的返回值

③使用FutrueTask对象作为Thread的target创建并启动新线程

使用FutrueTask的get方法获取执行结束后的返回值

结论:采取Runnable、Callable的优势在于——线程类只是实现了Runnable或Callable接口,还可以继承其它类;在这种方法下,多个线程可以共享一个target对象,因此非常适合多个相同线程处理同一份资源的情况,从而将CPU、代码和数据分开,形参清晰的模型,体现了面对对象的编程思想。劣势在于编程复杂度略高。

以上这篇java中进程与线程_三种实现方式总结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java  # 进程  # 线程  # 简述Java中进程与线程的关系_动力节点Java学院整理  # java多线程之线程  # 进程和Synchronized概念初解  # Java多线程并发执行demo代码实例  # java高并发之理解进程和线程  # Java多线程高并发中解决ArrayList与HashSet和HashMap不安全的方案  # java多线程之并发工具类CountDownLatch  # CyclicBarrier和Semaphore  # Java的线程与进程以及线程的四种创建方式  # Java并发编程之volatile与JMM多线程内存模型  # Java多线程并发与并行和线程与进程案例  # 多个  # 自己的  # 返回值  # 子类  # 是指  # 给大家  # 器上  # 重写  # 实现了  # 是在  # 发性  # 还可以  # 在这  # 不可以  # 中有  # 有一定  # 希望能  # 在这种  # 三种  # 它可以 


相关文章: 海南网站制作公司有哪些,海口网是哪家的?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  定制建站策划方案_专业建站与网站建设方案一站式指南  昆明网站制作哪家好,昆明公租房申请网上登录入口?  ,sp开头的版面叫什么?  建站主机无法访问?如何排查域名与服务器问题  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  开心动漫网站制作软件下载,十分开心动画为何停播?  网站制作服务平台,有什么网站可以发布本地服务信息?  制作表格网站有哪些,线上表格怎么弄?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  教程网站设计制作软件,怎么创建自己的一个网站?  大连 网站制作,大连天途有线官网?  ,在苏州找工作,上哪个网站比较好?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  广州营销型建站服务商推荐:技术优势与SEO优化解析  建站之星后台密码遗忘如何找回?  如何快速生成专业多端适配建站电话?  建站之星代理商如何保障技术支持与售后服务?  如何快速打造个性化非模板自助建站?  如何在Golang中使用replace替换模块_指定本地或远程路径  Thinkphp 中 distinct 的用法解析  ,有什么在线背英语单词效率比较高的网站?  网站制作网站,深圳做网站哪家比较好?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  ,如何利用word制作宣传手册?  如何高效搭建专业期货交易平台网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何通过远程VPS快速搭建个人网站?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何在云主机快速搭建网站站点?  如何快速搭建个人网站并优化SEO?  建站之星好吗?新手能否轻松上手建站?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  制作旅游网站html,怎样注册旅游网站?  如何在阿里云ECS服务器部署织梦CMS网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何快速搭建支持数据库操作的智能建站平台?  实例解析angularjs的filter过滤器  如何快速辨别茅台真假?关键步骤解析  建站之星在线客服如何快速接入解答?  内部网站制作流程,如何建立公司内部网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。