程序、进程和线程

Hello,大家好呀,上一周提到的是随机访问文件流以及序列化与对象输入输出,本周我们要讲的是程序、进程和线程 。

程序、进程和线程
程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期、它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点正是程序无法做到的,由于程序没有和数据产生直接的联系,即使是执行不同的数据的程序,它们的指令的集合依然是一样的,所以无法唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有与之对应的进程(因为它没有执行),也有可能有多个进程与之对应(运行在几个不同的数据集上)。
线程是进程内一个相对独立的、可调度的执行单元。又称为轻量级进程。和进程类似线程也有运行、就绪、阻塞等状态。线程必须拥有父进程。系统没有为线程分配资源、它与进程中的其他线程共享该进程的共享资源。同一进程的不同线程共享相同的地址空间,它们以访问相同的变量和对象,实现线程间的信息共享。线程间的通信简单而有效,上下文切我换非常快。线程可以彼此独立运行,一个程序可以同时使用多个线程来完成不同的任务。例如,考虑Word字处理程序的输入,词法检查,定时保存。易见,该应用程序涉及三个相独立的控制流,这三个控制流共享内存缓冲区中的文本信息。单进程或多进程模式都难以恰当地描述和处理这一问题,而同一进程中的三个线程是最恰当的模型。

多线程
多线程程序是指一个程序中包含多个执行流,它是实现并发机制的有效手段。从泛期的观点看,多线程意味着一个程序的多个语句块同时执行,但不等于多次启动一个程序。
引入多线程程序设计的原因:
1.某些应用具有内在的多控制流结构,这些控制流具有合作性质,需要共享内存。采用多线程易于对问题建模。
2.在需要多控制流的应用中,多线程比多进程在速度上具有绝对优势。统计表明,线程的建立速度约比进程的建立速度快100倍。
3.采用多线程可提高处理机与设备之间的并行性。
4.在多处理机的硬件环境中,多线程可并行执行,从而可提高资源利用率和进程推进速度。
多线程机制是Java语言的重要特征之一。Java是基于操作系统级的多线程环境设计的,JVM依靠多线程来执行多任务,并且所有类库在设计时都考虑到多线程机制。
Java的多线程是一个类,这个类可以对它的线程进行控制,可以确定哪个线程的优先级高,哪个线程应该执行,等等。线程的执行由拥有这个线程的一个或多个类来控制。Java中实现线程的方式有两种,第一种是生成Thread类的子类,并定义该子类自己的run()方法,线程要完成的任务在run()方法中实现。这种方法比较简单,但是如果定义的类已经是其他类的子类,而Java不允许多重继承,我们可以采取第二种方法实现Runnable接口,通过实现Runnable接口中的run()方法来完成线程的任务。

构建Thread 子类对象
Java直接定义了一个从根类Object中派生的Thread类。所有从java.lang. Thread类派生的直接子类或间接子类均为线程。构建Thread子类对象的步骤如下:
1.构建Thread子类,重写其中的run()方法。
2.创建线程对象。
3.线程对象调用start()方法启动该线程。

好啦,今天的分享就到这里了,希望能给有需要的朋友们一些帮助,有错误的话还请大家指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值