关于Java中的程序,进程和线程的详解...

程序:一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本。

进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命

周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在

一定的数据 集上运行的全部动态过程。通过进程控制块(PCB)唯一的标识某个进程。同时进程占据着相应的资源(例如包

括cpu的使用 ,轮转时间以及一些其它设备的权限)。是系统进行资源分配和调度的一个独立单位。

程序和进程之间的主要区别在于:

状态         是否具有资源       是否有唯一标识      是否具有并发性

进程     动态                有                      有                     有

程序     静态                无                      无                     无

线程: 可以理解为进程的多条执行线索,每条线索又对应着各自独立的生命周期。线程是进程的一个实体,是CPU调度和分派的

基本单位,它是比进程更小的能独立运行的基本单位。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之

间可以并发执行。

这里在详细讲解一下Java中的进程和线程的概念。

Java中的线程要经历4个过程

1)创建

创建一个Java线程常见的有两种方式:

继承Thread类和实现Runnable接口这两种方式。

2)执行

线程创建后仅仅占有了内存资源,在JVM管理的线程中还没有该线程,该线程必须调用start方法通知JVM,这样JVM

就会知道又有一个新的线程排队等候了。如果当前线程轮到了CPU的使用权限的话,当前线程就会继续执行。

3)中断

a.JVM将CPU的使用权限从当前线程切换到其它线程,使本线程让出CPU的使用权限而处于中断状态。

b.线程在执行过程中调用了sleep方法,使当前线程处于休眠状态。

c.线程在执行的过程中调用wait方法

d.线程在使用cpu资源期间,执行了某个操作而进如阻塞状态。

4)死亡

死亡的线程不在具有执行能力。线程死亡的原因有二:

a.线程正常运行结束而引起的死亡,即run方法执行完毕。

b.线程被提前强制终止。

时间: 2024-08-26 14:20:50

关于Java中的程序,进程和线程的详解...的相关文章

关于Java中进程和线程的详解

一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消.反映了一个程序在 一定的数据 集上运行的全部动态过程.通过进程控制块(PCB)唯一的标识某个进程.同时进程占据着相应的资源(例如包 括cpu的使用 ,轮转时间以及一些其它设备的权限).是系统进行资源分配和调度的一个独立单位. 程序和进程之间的主要区别在于: 状态         是否具有资源

经验分享-Java中JDK和JRE区别和误区详解!

1.了解基本的java概念.JDK和JRE基本了解 1.1)Java SE (原J2SE) Java Platform, Standard Edition    -- Java标准平台 1.2) Java EE (原J2EE) Java Platform, Enterprise Edition -- Java企业级应用平台 1.3)Java ME (原J2ME) Java Platform, Micro Edition      -- Java微系统应用平台 ##################

Java中的String,StringBuffer,StringBuilder详解与区别

1.String Java中string类是不可变的,其中在声明的源代码中用的final,所以只能声明一次.所以每次在明面上的改变其实是重新生成一个String对象,指针指向新的String对象.同时,String内部重写的了equal的方法,原本Object的equal就是两个对象相等就可以,但是现在,并不能靠对象相等来判断值相等了,重写的equal中会挨个比较字符,这也就是为啥比较同样内容字符串要用equal的原因. 同时String a="111"+"222"

C++/Java中继承关系引发的调用关系详解

C++: 这里引用到了 http://blog.csdn.net/haoel/article/details/1948051/ 中的内容,还请提前阅读陈大神的这篇博客后在阅读本篇. 覆盖,实现多态的基础,通过虚函数表来实现,下面这个例子便是覆盖 Override 1 #include<iostream> 2 3 using namespace std; 4 5 class Base{ 6 public: 7 Base(){ 8 cout << "Base::Base&qu

java中的并发:进程和线程

1.简介 1)进程:同一个系统中执行的一个子程序,包含三部分:虚拟CPU,代码,数据. 2)线程:同一个进程中执行的子程序流. 3)进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能.一个进程虽然包括多个线程,但是这些线程是共同享有进程占有的资源和地址空间的.进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位. 2.创建一个进程 2.1首先了解三个类    1)Process(抽象类)       进程类,提供了执行从进程输入.执行输出到进程.等待进程完成.检查

JAVA中this的三种用法的详解

this关键字必须放在非静态方法里面 this关键字代表自身,在程序中主要的使用用途有以下几个方面: ? 使用this关键字引用成员变量 ? 使用this关键字在自身构造方法内部引用其它构造方法 ? 使用this关键字代表自身类的对象 ? 使用this关键字引用成员方法 8.8.1.1 引用成员变量 在一个类的方法或构造方法内部,可以使用"this.成员变量名"这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略.首先看一下下面的代码: /** * 使用this引用成员变量

JAVA中list,set,数组之间的转换详解

JAVA的list,set,数组之间的转换,主要是使用Apache Jakarta Commons Collections,具体的方法如下:import org.apache.commons.collections.CollectionUtils; String[] strArray = {"aaa", "bbb", "ccc"};    List strList = new ArrayList();    Set strSet = new Ha

【Java学习笔记之十一】Java中常用的8大排序算法详解总结

分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序.   // 排序原始数据 private static final int[] NUMBERS = {49, 38, 65, 97, 76, 13, 27, 78, 34, 12, 64, 5, 4, 62, 99, 98,

java中==和equals和hashcode的区别详解

一.相同点 都是用来进行值或对象的比较. 二.不同点 对于“==”而言,对于基本类型(char,byte,short,int,long,float,double,boolean),对比的是值,所以是相等的,对于引用对象,对比的是引用的对象的堆地址,例如: public class Main { public static void main(String[] args) throws InterruptedException { Object obj1 = new Object(); Objec