`

Java线程学习笔记(一):进程与线程

    博客分类:
  • Java
阅读更多

一、概念

 

进程:系统资源分配的基本单位,又是调度运行的基本单位。

        例如,用户运行了一个程序,系统就为该程序创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,该进程放入进程的就绪队列,进程调度程序选中它,并为它分配CPU以及其它资源,该进程才真正运行,所以,进程是系统系统中并发执行的单位。

        在Mac、Windows NT采用微内核结构的操作系统中,进程的功能发生了变化,它只是资源分配的单位,而不再是调度运行的单位,在微内核系统中真正调度运行的基本单位是线程,因此,实现并发功能的是线程。

 

线程:线程是进程中执行运算的最小单位(亦即执行处理器调度的基本单位),线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的方法(函数)。

        如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。

        例如,假设用户启动了一个窗口中的数据库应用程序,操作系统将对数据库的调用表示为一个进程。

        假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输入数据库查询请求,这又是一个子任务。这样,系统则把每一个请求——工资单报表和新输入的数据库查询,表示为数据库进程中的独立线程。

        线程可以在处理器上独立调度执行,这样在多处理器环境下,就允许几个线程各自在单独的处理器上运行。操作系统提供线程就是为了方便而有效的实现这种并发性。

 

多线程:多线程是指程序中包含多个执行流。即在一个程序中可以运行多个不同的线程来执行多个不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

 

二、内存

 

每一个进程都从一个主线程开始执行,但可以在它拥有的线程中创建额外的线程。

一个进程的所有线程共享进程的虚拟地址空间和系统资源,一个线程的资源包括线程的机器寄存器设置,内核堆栈,线程环境变量和进程虚拟地址中的用户堆栈。

 

三、引入线程的好处

  1. 易于调度
  2. 提供并发性。通过线程可以方便有效的实现并发。进程可创建多个线程来执行同一程序的不同部分。
  3. 开销少。创建线程比创建进程要快,所以开销很少。
  4. 利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可以具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分利用。

四、进程与线程的关系

  1. 一个程序至少有一个进程;一个进程可以多个线程,但至少要有一个线程;一个线程只能属于一个进程。
  2. 资源分配给进程,同一个进程中的所有线程共享该进程的所有资源。
  3. 处理器分配给线程,即真正在处理器上运行的是线程
  4. 线程在执行过程中,要求协作同步。不同进程的线程间,要利用消息通讯的办法实现同步。

五、多线程的优劣

 

优点:可以提高CUP的利用率。在多线程的程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样大大提高了程序的执行效率,同时也提高了系统资源的利用率。

 

缺点:

  • 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
  • 多线程需要协调和管理,所以需要CPU时间跟踪线程;
  • 线程之间对共享资源的访问会相互影响,必须解决公用共享资源的问题;
  • 线程太多会导致控制太复杂,最终可能造成很多bug;

Java线程学习笔记(二):线程的创建

 

注:本文源自互联网,经过查阅网上资料整理而成,如涉及到他人整理的成果,在此表示感谢。由于涉及到的参考文章比较多,在此就不再一一列举。

本文是目前个人理解的结果,仅供参考,如后续发现问题,本人会进行相应的更正,也欢迎各位对Java线程感兴趣的朋友或者前辈进行指正。

分享到:
评论

相关推荐

    java多线程笔记

    Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java...

    Java 并发学习笔记:进程和线程,并发理论,并发关键字,Lock 体系,原子操作类,发容器 & 并发工具,线程池,并发实践

    Java 并发学习笔记: 进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的...

    VC学习笔记之四:多线程知识.doc

    Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,...浏览器就是一个很好的多线程的例子,在浏览器中你可以在下载JAVA小应用程序或图象的同时滚动页面,在访问新页面时,播放动画和声音,打印文件等。

    黑马程序员–Java多线程讲解笔记

     线程:是进程中一个执行单元或执行情景或执行路径负责进程中程序执行的控制单元 。一个进程中至少要有一个线程。当一个进程中线程有多个时,是多线程。  为什么要用多线程  1,让计算机"同时"做多件事情,...

    juc:Java多线程学习笔记源码部分

    进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O)。 进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,...

    java学习笔记 – 线程安全问题操作实例

    一.并发与并行 了解线程之前我们需要知道并发和并行的概念。...线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程 中是可以有多个线程的,这个应用程序也可以称之为多

    JAVA并发编程实践-线程的关闭与取消-学习笔记

    java中没有提供任何机制,来安全是强迫线程停止手头的工作,Thread.stop和 Thread.suspend方法存在严重的缺陷,不能使用。程序不应该立即停止,应该采用中断这种协作机制来处理,正确的做法是:先清除当前进程中的...

    Java并发编程(学习笔记).xmind

    (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置交互 (3)简化异步事件的处理:服务器应用程序在接受...

    婚庆管理系统java源码-LearnThread:学习Java多线程

    线程:CPU调度和执行的单位。 ==一个进程可以包含有多个线程==(如视频中同时听到声音、看到图像,还可以看弹幕);一个进程至少有一个线程,否则无存在的意义。 注意:很多多线程是模拟出来,真正的多线程是

    4种多线程创建笔记.md

    以上笔记是我总结4种Java的多线程的创建方式,这个笔记给有需要的人学习,一起增长知识,介绍了什么是进程,什么是线程,以及并发与并行的概念,还有线程池的使用

    java8源码-JavaSE-Code:JavaSE的代码练习与学习笔记总结

    第一章:Java多线程技能 线程是进程中的子任务 interrupted与isInterrupted的区别: interrupted是Thread类的静态方法,里面调用了isTnterrupted方法[currentThread().isInterrupted()],测试当前线程是否已经中断,线程...

    net学习笔记及其他代码应用

    1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。...47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可...

    java并发学习笔记

    文章目录1 线程基础、线程之间的共享与协作1.1 cpu时间片轮询机制1.2 进程与线程1.3 并行与并发1.4 启动线程的三种方式1.5 停止线程1.6 线程的生命周期1.7 守护线程1.8 synchronized关键字1.9 volatile关键字1.10 ...

    整理后java开发全套达内学习笔记(含练习)

    Thread [java] 线程 [θred] throw (关键字) throws (关键字) [θrәu] 抛出(异常) transient (关键字) 瞬变;临时的['trænziәnt]'(可序列化) valid 正确的,有效的 ['vælid] variable n.变量 a.可变的['vєә...

    Java设计模式教程

    包含以下教程:《深入浅出设计模式(中文版)》《Java单例模式》《Java设计模式-图解-附代码》《JAVA设计模式之单例模式(完整版)》《Java学习笔记(必看经典)》《Java总复习》《单例模式》《线程与进程》。

    java_thread_study

    Multi-Thread Learning - Java (多线程)狂神说-java多线程-个人学习笔记 (原bilibili视频链接已附在文中)多线程线程简介多任务多件事,但是 某一瞬间 只做一件事多线程同时做多件事 (并发操作)进程运行一个程序,...

    java7rt.jar源码-JVM:JVM学习笔记

    进程/线程 并发/并行 线程 package com.ntuzy.juc_01 ; import java.util.concurrent.Callable ; import java.util.concurrent.ExecutionException ; import java.util.concurrent.FutureTask ; /** * @Author IamZY...

    学习笔记(01):19年并发编程及原理视频培训教程入门到精通-什么是并发编程

    串行和并行的区别:串行实质上是一个进程有一个线程。并行是一个进程有多个线程。 并发编程的目的:让程序充分利用计算机资源,加快程序响应速度(耗时任务,web服务器),简化异步事件的处理。 什么时候适合使用...

    Java+JDK+6[1].0学习笔记

    一个用java实现的哲学家进餐问题,对于理解进程对临界资源的处理很有好处!

Global site tag (gtag.js) - Google Analytics