进程和线程

进程的诞生

  操作系统中有2个任务A,B,任务A先执行,执行到一半需要io,因此要大量时间,在这个时间段内cpu是空闲的,浪费了资源,于是就有进程,当A暂时无法利用cpu,但是又不能销毁时,就把它暂存起来,让B来执行。B执行完或者需要A执行时,根据暂存的信息回复过来。

  每个进程都对应一定的内存空间,并且只能使用自己的内存空间,并且保留程序的运行状态,这个也为进程切换提供了基础。

线程的诞生

  第一,多核处理器的出现,为了更好的利用多核处理器,避免资源的浪费。第二程序的需要,人们需要在一个程序中并发执行任务。比如播放器边播放视频,我们还要可以边品论,显然要并发执行。第三。一个程序中出现了阻塞(io)而导致程序不能继续进行,这个很影响体验和操作,因此我们需要多线程,把这些耗时的操作都丢到子线程里面去,这样程序就可以继续走下去了。

线程的基本概念和注意点

  1.对操作系统来说,资源分配的基本单位是进程,而调度的基本单位是线程。

  2.对于一个程序来说,不一定多线程的效率就高,不能盲目的使用,多线程的使用和具体业务场景(交互之类的),以及机器的特性,比如是多核还是单核的机器等

3.每个线程表示一条单独的执行流,有自己的程序计数器,有自己的栈,但线程之间可以共享内存,它们可以访问和操作相同的对象。

  4.java是单线程编程语言,你要是不主动创建线程,那么就默认只有主线程,当然jvm还是会有其他很多后台精灵线程存在的,比如垃圾回收
(Erlang就是一种并发编程语言,每一个函数都可以当做独立的任务来驱动)

java线程的状态


  1.新建:创建一个线程对象

  2.可运行:线程调用了start方法,存在于可运行线程池中。

  3.运行态:线程获取到了cpu使用权。

  4.阻塞态:第一:运行的线程调用对象的wait()方法(该方法只存在于同步加锁代码块中),让出锁,进入等待队列。只用同样调用该对象的线程使用notify()方法才会进入到锁池中。 第二:运行的线程获取一个加锁的资源时,若该资源被占用,进入锁队列中,只用当锁队列中的线程获取到了加锁的对象资源时,才会进入到可运行状态中。第三:运行的线程执行sleep()或者join()方法,或者io,该线程会阻塞队列,等时间到,或者io完成,会自动进入可运行状态。

  5.死亡:线程执行完,或者异常中断退出。

java线程的基本概念的更多相关文章

  1. java 线程及synchronized关键字

         从本篇开始,我们将会逐渐总结关于java并发这一块的内容,也可以理解为是我的笔记,主要来自于一些博客和java书籍中的内容,所有的内容都是来自于他们之中并且加上了我自己的理解和认识.     ...

  2. 一文搞懂 Java 线程中断

    在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分 ...

  3. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  4. java 并发性和多线程 -- 读感 (一 线程的基本概念部分)

    1.目录略览      线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程.      线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...

  5. java 线程​基本概念 可见性 同步

    开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于J ...

  6. Netty核心概念(7)之Java线程池

    1.前言 本章本来要讲解Netty的线程模型的,但是由于其是基于Java线程池设计而封装的,所以我们先详细学习一下Java中的线程池的设计.之前也说过Netty5被放弃的原因之一就是forkjoin结 ...

  7. java多线程(1) 线程的基本概念

    一.线程的基本概念: 线程是一个程序里面不同的执行路径. 程序里面不同的执行路径,每一个分支都是一个线程.   进程:静态的概念.机器上的一个class文件,机器上的一个exe文件,这叫一个进程. 机 ...

  8. Java线程:概念与使用

    Java线程大总结 原文章地址:一篇很老的专栏,但是现在看起来也感觉深受启发,知识点很多,很多线程特点我没有看,尴尬.但是还是整理了一下排版,转载一下. 操作系统中线程和进程的概念 在现代操作系统中, ...

  9. Java线程:概念与原理(转)

    一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...

随机推荐

  1. DataSet转化为DataTable

    . DataTable dt = ds.Tables[]; . DataTable dt = dao.FillTables("GetOptions_DKI_City_HCPName" ...

  2. Python3 Tkinter-Checkbutton

    1.多选按钮创建 from tkinter import * root=Tk() Checkbutton(root,text='python').pack() root.mainloop() 2.绑定 ...

  3. pxe+kickstart无人值守安装

    常用软件安装及使用目录 第1章 以前是怎么安装系统的 l 光盘(ISO文件,光盘的镜像文件)===>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜 ...

  4. ide的tomcat的部署和配置

    关于intellij ide的tomcat的部署和配置   1.下载zip版的Tomcat 7,并解压.下载地址 2.在IDEA中配置Tomcat 7 在idea中的Settings(Ctrl+Alt ...

  5. 迭代器类型:iterator & const_iterator

    vector<int> ivec{1, 3, 4, 1, 3, 4}; vector<int>::iterator iter; // iter能读写vector<int& ...

  6. 常用算法Java实现之选择排序

    选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序. 具体流程如下: 1.首先从原数组中选择最小的1个数据,将其置于第一个位置. 2.然后从剩下的数据中再选择其中最小的一个数据,并将 ...

  7. 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)

    一.升级要求:让程序能接受用户输入答案,并判定对错.最后给出总共对/错的数量. 二.设计思想: 1.首先输入答案并判断对错.我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案.每输出一道 ...

  8. ACM 第十九天

    积性函数 积性函数线性筛,筛素数,u(n),欧拉函数: vis[]=vis[]=,mu[]=,phi[]=; ;i<=N;++i){ ,phi[i]=i-,prime[++cnt]=i; ,k= ...

  9. 3DMAX贴图无法显示

    问题描述:我在点击"将材质指定给选定对象"按钮之后,模型只是变灰了,没有显示出我贴的图. 原因是:没有显示贴图. 我的解决方案:点击材质编辑器里面的"视口中显示敏感处理材 ...

  10. lol人物模型提取(二)

      两个dds文件怎么导入到一个模型上呢?这模型又不能拆开.   一开始我想的是用两个材质球来完成,一个材质球对应一个dds文件,然而行不通.   一个材质球对应两个dds文件还不太会弄,于是我想着干 ...