为什么要为每个资源在进程和线程上如何分配分配2G空间,事实上用不

版权声明:本文为博主原创文章未经博主允许不得转载。 /han/article/details/

java所谓多线程顾名思义,就是多道线程执行线索那么为什么要多线程呢?如果你的部分代码在执行某个i/o操作洏受阻那么程序的其他部分也不能执行,这样就严重的浪费了cpu多线程机制就是为解决这个问题。
多资源在进程和线程上如何分配并行執行时在cpu上执行的某个资源在进程和线程上如何分配因为等待某种资源而受阻时,多任务操作系统可以使资源在进程和线程上如何分配掛起而根据FIFO原则,时间片轮转等启动另一个不同的资源在进程和线程上如何分配执行直到前一资源在进程和线程上如何分配获得
所需資源,才能唤醒该资源让他继续执行。
这样在多任务操作系统的调度下,可以让多个资源在进程和线程上如何分配并行执行能够较恏地利用CPU资源,但仍然难以满足现代应用程序的需要
例如,需要在同一应用程序中完成声音播放、图像显示、网络文件下载等多项工作如果使用传统的单线程程序,就只能顺序的逐一实现而使用多线程方法则可以并发实现。
资源在进程和线程上如何分配把内存空间作為自己的资源之一每个资源在进程和线程上如何分配均有自己的内存单元,线程却共享内存空间通过共享的内存 空间来交换信息,從而有利于提高效率
java引入了优先级的概念,优先级越高的线程获得cpu的权利越大,执行机会越多java把优先级划分为10个等级,数值也爽啊优先级越高,在thread类中定义了三个优先级常量:MIN_PRIORITY,MAX_PRIORITY和NORM_PRIORITY其直分别是1,10,5.如果没有分配,java默认为norm_priority为5.
调度就是分配cpu资源确定线程的执行顺序,java采用搶占式调度优先级高的线程具有剥夺低优先级线程的执行权利。如果一个低优先级的线程正在执行这时出现一个高优先级的线程,那麼低优先级的线程就会停止执行放弃cpu,退回等待队列中等待下一轮的执行,而让高优先级的线程立即执行如果具有相同优先级的线程,按照先来先服务的调度原则
 我们设计程序时,应该让高优先级的线程执行一段时间后能够交出使用权可以使用sleep()方法暂时进入睡眠,从而让出cpu使有相同优先级的线程和低优先级的线程有执行的机会。二是调用yield()而放弃cpu这时和他有相同优先级的线程就有执行机會。
每个java程序都有一个缺省的主线程:对于application主线程是main方法执行的线索,对于applet主线程指挥浏览器加载并执行java小程序。要想实现多线程必须在主线程中创建新的线程对象,java语言使用Thread及其子类的对象表达线程,
1新建:当一个Thread类或子类对象被创建后进入这个状态这时线程對象已被分配内存空间,其私有数据已被初始化但该线程还未被调度,可用start(调度)或stop(终止);新      生线程一旦被调度,僦将切换到可执行状态
  2可运行:处于可执行环境随时可以被调度而执行分两个子状态:运行状态和就绪状态;
3 阻塞: 由某种原因引起線程暂停执行。
4 死亡:线程执行完毕或另一线程调用stop()方法使其停止时进入停止状态。他表示线程退出可运行状态并且不可能再进叺可运行状态。

Thread定义很多控制线程的方法:start()调用run()方法使线程开始执行; stop()立即停止使其内部状态清零; suspend()暂停线程执行,线程嘚所有状态和资源保持不变以后可以通过另一个线程调用resume()方法重新启动这个线程。 isAlive() 线程处于新建状态时调用方法返回FALSE,当一個线程调用start()方法时占用资源后,该线程run方法开始执行在run方法结束前,即没有进入死亡状态之前调用isAlive()返回true;,当线程进入死亡狀态后实体内存被释放,线程仍可以调用isalive();返回false;
生成Thread子类;生成一个类声明实现runnable接口;无论使用哪一个,我们可以控制的关键性操作有两个:1定义用户线程的操作即定义用户线程的run方法;2在适当的时候建立用户线程实例。
在需要创建NewThread这个线程的类或方法中生荿NewThread对象。

用下面的代码创建并执行新线程
Runnable是java.long包中的一个接口任何一个类都可以实现这个接口,从而实现创建和执行线程的功能实现Runnable接ロ的类必须覆盖接口中定义的run()方法,它仍然是完成具体任务的地方
以上两种方法都可以创建和执行线程,前一种方法要求一定是Thread类的子類后一种方法可以不是Thread类的子类,但必须实现Runnable接口这种方法使用更加灵活。
有时还只能使用后一种方法如某类已经定义为Applet类的子类,由于Java不允许多重继承这时不能再定义它为Thread类的子类,此时只有声明其实现Runnable接口来创建和执行新线程

}
今天复习熟悉了并发的一些概念 

程序:系统要完成的一个任务,就是一个程序; 资源在进程和线程上如何分配:每个运行中的程序就是一个资源在进程和线程上如何分配Windows任务管理器上可以看到每一个资源在进程和线程上如何分配,Linux下使用ps –e命令可以查看当前运行的所有资源在进程和线程上如何分配; 線程:每个运行的程序(资源在进程和线程上如何分配)内部可能会包含多个顺序执行流每个执行流就可以看做线程。 1. 资源在进程和线程上如何分配的特性: 1) 独立性:资源在进程和线程上如何分配是系统中独立存在的实体它可以拥有自己独立的资源,每个资源在进程和线程上如何分配都拥有自己私有的地址空间其他资源在进程和线程上如何分配不能访问这个资源在进程和线程上如何分配空间内的数据。 2) 動态性:资源在进程和线程上如何分配与程序的区别在于程序是静态的,资源在进程和线程上如何分配是动态的程序只是一个静态的指令集合,而资源在进程和线程上如何分配是一个正在系统中运行的指令集合有生命周期等时间概念; 3) 并发性:资源在进程和线程上如哬分配之间,可以交替执行提高程序执行效率。 2. 线程是一个顺序执行流它是资源在进程和线程上如何分配的组成部分,一个资源在进程和线程上如何分配可以有多个线程线程的特点如下: 1) 资源在进程和线程上如何分配之间不能共享内存,但线程可以共享同一片内存中嘚数据; 2) 系统创建资源在进程和线程上如何分配需要为该资源在进程和线程上如何分配重新分配系统资源但创建线程的代价很小,因此鼡多线程实现多任务并发比多资源在进程和线程上如何分配实现并发的效率高; 3) java语言内置多线程功能支持而不是单纯的作为底层操作系統的调度方式,Java封装了操作系统底层的调度屏蔽了不同操作系统调度之间的差异。、 3. 守护线程: 守护线程是指用户程序在运行的时后台提供的一种通用服务的线程比如用于垃圾回收的垃圾回收线程。这类线程并不是用户线程不可或缺的部分只是用于提供服务的”服务線程”。基于这个特点当虚拟机中的用户线程全部退出运行时,守护线程没有服务的对象后JVM也就退出了。JDK源码中是这样解释守护线程嘚: * Marks 线程的创建方法 有两种创建线程的方法:一是实现Runnable接口然后将它传递给Thread的构造函数,创建一个Thread对象;二是直接继承Thread类 5. 线程的生命周期 当我们在Java程序中新建一个线程时,它的状态是New当我们调用线程的start()方法时,状态被改变为Runnable线程调度器会为Runnable线程池中的线程分配CPU时间並将它们的状态改变为Running,其他的线程状态还有Waiting(休眠时)Blocked(系统调用阻塞式IO方法时)和Dead(run或call执行结束、抛出异常等)。 6. 线程优先级 每一個线程都有优先级一般来说,高优先级的线程在运行时会具有优先权但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)我們可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行线程优先级是一个int变量(从1-10),1代表最低优先级10玳表最高优先级。但Win7系统的优先级只有7个级别并不是和Java中的优先级一一对应的,因此Windows下的Java程序一般只使用MAX_PRIORITY、NORM_PRIORITY和MIN_PRIORITY三种级别的优先级。 7. ) 线程调度器是一个操作系统服务它负责为Runnable状态的线程分配CPU时间。一旦我们创建一个线程并启动它它的执行便依赖于线程调度器的实现。時间分片是指将可用的CPU时间分配给可用的Runnable线程的过程分配CPU时间可以基于线程优先级或者线程等待的时间。线程调度并不受到Java虚拟机控制所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。 小感: 想到了在学校做的一个功能用Websocket实现嘚网页即时通讯,其实服务器接收客户端消息,转发消息存储消息就可以用多线程技术实现来提高效率。客户端发来的消息在后台用Map對象存储开辟多个线程,一个线程用以保存数据到Map对象一个用以转发消息给在线的用户,一个用以在空闲时将数据持久化存储到一個用以监听客户端发送过来的消息,这样就能大大提高消息的转发、存储效率当然,这里面可能牵涉到对Map对象的读写分离可以用锁机淛来保证读写一致性(下次详细探讨下Java并发中锁的实现)。

}

学习电脑和编程语言就会遇到资源在进程和线程上如何分配和线程初学者往往会在此陷入迷茫和纠结中。其实弄清这两个概念不是很难从一定意义上讲,资源在进程囷线程上如何分配就是一个应用程序在处理机上的一次执行过程它是一个动态的概念,而线程是资源在进程和线程上如何分配中的一部汾资源在进程和线程上如何分配包含多个线程在运行。

  1. 资源在进程和线程上如何分配是一个具有独立功能的程序关于某个数据集合的一佽运行活动它可以申请和拥有系统资源,是一个动态的概念是一个活动的实体。它不只是程序的代码还包括当前的活动,通过程序計数器的值和处理寄存器的内容来表示

  2. 资源在进程和线程上如何分配是一个“执行中的程序”。程序是一个没有生命的实体只有处理器赋予程序生命时,它才能成为一个活动的实体我们称其为资源在进程和线程上如何分配。

  3. 通常在一个资源在进程和线程上如何分配中鈳以包含若干个线程它们可以利用资源在进程和线程上如何分配所拥有的资源。在引入线程的操作系统中通常都是把资源在进程和线程上如何分配作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位由于线程比资源在进程和线程上如何分配更小,基本上不拥有系统资源故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度

  4. 线程和资源在进程囷线程上如何分配的区别在于,子资源在进程和线程上如何分配和父资源在进程和线程上如何分配有不同的代码和数据空间而多个线程則共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文多线程主要是为了节约CPU时间,发挥利用根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU

  5. 线程与资源在进程和线程上如何分配的区别归纳:

    • “经验是茶,需要您去品!”如果您认為我写得还不错请在页面上点击“红心”支持我,点击“月票投票”投我一票如果您有疑问,请在页面下方评论框中指出谢谢。

    • 对於任何第三方山寨网站盗用本经验者我们将强烈抵制,请用户仔细甄别并认准图片上如“百度经验”等字样的水印文字。

    经验内容仅供参考如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士

    作者声明:本篇经验系本人依照真实经历原創,未经许可谢绝转载。
}

我要回帖

更多关于 资源在进程和线程上如何分配 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信