进程和线程

进程的诞生

  操作系统中有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. JS验证验证服务器控件

    JS验证验证服务器控件 <script language="javascript" type="text/javascript"> /******* ...

  2. “Hello World!团队”Alpha发布—视频链接+文案+美工

    视频链接:http://v.youku.com/v_show/id_XMzEyNjc2MTAyOA==.html?sharefrom=iphone&sharekey=5378037f8b710 ...

  3. Daily Scrum 10

    今天我们小组开会内容分为以下部分: part 1: 经过反复思考,对于上次组会确定的在系统中加入娱乐版块进行了更进一步的商讨; part 2:继续探讨算法实现: part 3:进行明日的任务分配; ◆ ...

  4. Android - 按钮组件详解

    总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN :  http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...

  5. 【转】自定义(滑动条)input[type="range"]样式

    1.如何使用滑动条? 用法很简单,如下所示: <input type="range" value="0"> 各浏览器原始样式如下: Chrome:  ...

  6. 2019寒假训练营寒假作业(三) MOOC的网络空间安全概论笔记部分

    目录 第五章 网络攻防技术 5.1:网络信息收集技术--网络踩点 信息收集的必要性及内容 网络信息收集技术 网络踩点(Footprinting) 网络踩点常用手段 5.2:网络信息收集技术 --网络扫 ...

  7. Hive整体优化策略

    一 整体架构优化 现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez.Spark等.根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点: 1 根据 ...

  8. 转 Redis集群技术及Codis实践

    转  Redis集群技术及Codis实践 转自 :http://blog.51cto.com/navyaijm/1637688 codis开源地址:https://github.com/CodisLa ...

  9. tomcat8配置管理员后仍然报403

    tomcat8配置管理员后仍然报403   修改conf/tomcat-users.xml <role rolename="manager"/> <role ro ...

  10. 《Effective C#》快速笔记(二)- .NET 资源托管

    简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内存,我们并不需要去担心内存泄漏,资源分配和指针初始化等问题.不过,它也并非万能 ...