多线程与进程

author author     2022-10-13     420

关键词:

  • 进程:(process)
    进程是操作系统中运行的一个任务(一个应用程序运行
    在一个进程中)
    进程中所包含的一个或多个执行单位称为线程(thread)
  • 多线程
    多线程允许我们可以"同时"执行多段代码

    实际上多线程是并发运行的,即:JVM中的线程调度会为多个
    线程分配"CPU时间片",并将这些时间片尽可能均匀的分配
    给线程,当一个线程获取时间片后,该线程热任务代码被
    CPU执行,其他线程处于等待状态,这种宏观上同时运行而微观
    上走走停停的现象被称为并发.

  • java中的线程是由Thread的实例表示.
    而Thread的创建有两种方式:
    1:继承Thread并重写run方法
    2:实现Runnable接口并重写run方法来单独定义任务

  • 启动线程是调用线程的start方法,而不是直接调用run方法.
  • start方法的做作业是将线程纳入线程调度.一旦start方法
    执行完毕后,那么该线程的run方法会很快被运行(只要获
    取了CPU时间片)
    线程同步是并发运行代码,两段代码间不存在先后运行的概念.
    有先后顺序运行多段代码称为:同步执行
    多线程在运行多段代码时是:异步运行(各自执行各自的)

  • 第一种创建线程的方式虽然定义简单,但也存在一些不足:
    1:由于java是单继承的,这经常导致在实际开发中,为了
    复用一个类的方法,我们需要继承那个类,而自身又希望
    是一个线程时导致的继承冲突
    2:继承了线程需要重写run方法来定义该线程执行的任务代码,
    这就导致了线程与执行的任务有一个必然的耦合关系,不利于
    线程的复用.

  • 线程优先级
    对于线程调度的工作,线程不能干涉,即:线程只能被动
    的等待分配CPU时间片,而不能主动获取.
    可以通过修改线程优先级来最大程度改善获取CPU时间片
    的几率, 理论上, 线程优先级越高的线程获取CPU时间片
    的次数越多.
    线程的优先级有10个等级,分别用整数1-10表示.
    其中1位最低,10最高,5位默认值

  • 守护线程 守护线程也被称为后台线程
    默认创建出来的线程都是前台线程,若要设置为后台线程
    可以通过线程提供的方法setDaemon来完成
    后天线程使用上与前台线程一样,但是在结束时机上有
    一点是不同的,即:当一个进程结束时,所有正在运行的
    后台线程都会强制结束.而进程的结束时当一个进程中
    所有前台进程都结束时结束.
    所以将来开发中可以将一直保持运行的任务,但是可以随着
    程序一同结束的放在后台线程上运行

  • 线程提供了一个方法:join join可以协调线程间同步运行
  • 当show线程调用download线程的join方法时,show线程
    进入阻塞状态,直到download执行完毕才会解除阻塞继续
    执行后续代码
  • 当一个方法的局部内部类中需要引用该方法的其他
    局部变量时,该方法必须是final的
  • JDK1.8之后由于内存问题被重新定义,不在有这个问题,
    所以就不再需要上述设定.

  • 有效的缩小同步范围可以在保证并发安全的前提下
    提高并发的效率

  • 同步块可以更精确的控制需要同步执行的代码片段.
    有效缩小同步范围提高并发效率但是需要注意,
    同步块需要指定"同步监视器"即:上锁的对象,要
    保证需要同步运行该代码的线程看到的该对象是同一个.

  • 多线程并发安全问题
    当多个线程并发访问统一资源时,由于线程切换时机不确定
    导致代码未按照设计方式的顺序执行导致的逻辑混乱.严重
    时可能导致系统瘫痪.

    解决多线程并发安全的手段是将"各干各的"变为"排队执行"
    当一个方法被synchronized修饰后,那么该方法称为"同步
    方法",即:多个线程不能同时进入到方法内部执行
    在方法上使用synchronized修饰后,上锁的对象就是当
    前方法所属对象,即:方法中看到的this

  • 静态方法使用synchronized,那么一点具有同步效果
    静态方法上锁的对象是该方法所属类的类对象
    实际上JVM在加载一个类的class文件时,会实例化一个Class
    类型的实例去保存该类的信息(属性,方法等).所以JVM
    中每个加载过的类都有且只有一个Class的实例用于表示它
    这个Class的实例就是该类的类对象

  • 线程安全的集合也不与迭代器遍历集合的操作 互斥,但是
    迭代器要求遍历的过程中不能通过集合的方法增删元素,
    否则会抛出异常,所以在多个线程间有这样的操作时,
    需要自行维护遍历 集合与集合元素操作间的互斥关系.

  • 线程池 线程主要解决两个问题:
    1:控制线程数量.因为线程数多了,会导致内存开销大.
    严重时会导致系统瘫痪,并且由于线程数量多会导致
    CPU过度切换,拖慢系统响应.
    2:重用线程
  • python之多线程与多进程

    1.多进程与多线程(1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任... 查看详情

    多线程与多进程---方法对比与使用

    多线程与多进程 创建多线程和多进程创建多线程方法一:直接调用import threading, time         def foo(name):       time 查看详情

    多线程与多进程

    创建线程在Windows平台,WindowsAPI提供了对多线程的支持。前面进程和线程的概念中我们提到,一个程序至少有一个线程,这个线程称为主线程(mainthread),如果我们不显示地创建线程,那我们产的程序就是只有主线程的间线程程序... 查看详情

    多线程与进程

    ...在一个进程中)进程中所包含的一个或多个执行单位称为线程(thread)多线程多线程允许我们可以"同时"执行多段代码实际上多线程是并发运行的,即:JVM中的线程调度会为多个线程分配"CPU时间片",并将这些时间片尽可能... 查看详情

    多进程与多线程(代码片段)

    线程和进程:  进程:对于操作系统来说,打开一个记事本是进程,打开一个word是一个word进行,打开QQ也是一个进程。进程是很多资源的集合。  线程:打开word后,word可以同时进行打字,拼写检查,打印等事情。在一个进... 查看详情

    多进程与多线程差别

    在Unix上编程採用多线程还是多进程的争执由来已久,这样的争执最常见到在C/S通讯中服务端并发技术的选型上,比方WEBserver技术中。Apache是採用多进程的(perfork模式,每客户连接相应一个进程,每进程中仅仅存在唯... 查看详情

    perl的多线程与多进程

    多进程:拥有多个pid,独立占用内存。多线程:不具备独立的pid.选择:需要多线程/进程的部分独立生成结果的时候,不存在共有变量的输出等情况下可选择多进程。(注意独立)。当多线程部分需要返回结果且汇总的时候(非... 查看详情

    python多进程与多线程(代码片段)

    1、基本概念2、多线程内容方法3、多进程内容方法1、基本概念1.1线程1.1.1什么是线程线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流... 查看详情

    多线程与多进程的区别

    (1)多线程多进程的区别维度多进程多线程总结数据共享、同步数据是分开的:共享复杂,需要用IPC;同步简单多线程共享进程数据:共享简单;同步复杂各有优势内存、CPU占用内存多,切换复杂,CPU利用率低占用内存少,切换简... 查看详情

    多线程与多进程的区别

    鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有... 查看详情

    python多线程原理与实现(代码片段)

    Date:2019-06-04Author:SunPython多线程原理与实战目的:(1)了解python线程执行原理(2)掌握多线程编程与线程同步(3)了解线程池的使用1线程基本概念1.1线程是什么?线程是指进程内的一个执行单元,也是进程内的可调度实体.与进... 查看详情

    java多线程和并发,进程与线程的区别

    目录1.进程和线程的由来2.进程和线程的定义3.进程和线程的区别一、进程和线程的区别1.进程和线程的由来  2.进程和线程的定义  进程是资源分配的最小单位,线程是CPU调度的最小单位 3.进程和线程的区别   查看详情

    python多进程和多线程(代码片段)

    文章目录一、进程与线程二、多进程与多线程三、python多进程与多线程一、进程与线程进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存线程是进程的基本... 查看详情

    多进程与多线程的区别

    ...的面试被问到了没答好,在此记录下加深印象进程与线程的区别先来说下进程与线程间的区别:进程是一个独立功能的程序,而线程是进程中的其中一个功能(比如:你打开了QQ,QQ就是一个进程。然后你... 查看详情

    多线程与多进程

    ...et/luoweifu/article/details/46673975作者:luoweifu转载请标名出处单线程任何程序至少有一个线程,即使你没有主动地创建线程,程序从一开始执行就有一个默认的线程,被称为主线程,只有一个线程的程序称为单线程程序。如下面这一简... 查看详情

    线程,进程。多进程,多线程。并发,并行的区别

    一:线程与进程 1.概念 线程:是程序执行流的最小单元,是系统独立调度和分配CPU(独立运行)的基本单位。 进程:是资源分配的基本单位。一个进程包括多个线程。 2.区别: 1.线程与资源分配无关,它属于... 查看详情

    多任务-进程与线程的区别

    1.进程是系统进行资源分配和调度的一个独立单位,而线程则是进程的一个实体。是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序... 查看详情

    编程思想之多线程与多进程:以操作系统的角度述说线程与进程

    原文出处: luoweifu   什么是线程什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲的话,也不能确保讲的内容全部都正确。即... 查看详情