zoukankan      html  css  js  c++  java
  • 多线程概念

    概念

    多线程:是指从软件或者硬件上实现多个线程并发执行的技术,多线程包括软件多线程和硬件多线程。

    软件多线程:即便处理器只能运行一个线程,操作系统也可以通过快速的在不同线程之间进行切换,由于时间间隔很小,来给用户造成一种多个线程同时运行的假象。

    进程:是指计算机中已运行的程序.

    并行:并列运行,多个CPU下支持

    并发:多个任务请求运行,CPU轮流交替运行

    进程和线程区别:一个应用程序启动一个进程,一个进程可以有多个线程

    多线程优点:程序运行速度快、执行程序可以后台运行、提高响应效果

    多线程缺点:多线程共享堆内存和方法区(存在线程安全的问题)栈内存不共享,启动多线程晖占用更多内存(资源消耗增多)

    线程池:面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。

    线程池的创建方式

    §  Executors.newFixedThreadPool(int nThreads);

    通过传入的int类型参数来指定创建线程池中的线程数,如果任务数量大于线程数量,则任务会进行等待。

    §  Executors.newCachedThreadPool();

    会根据需要创建新线程的线程池,如果线程池中的线程数量小于任务数时,会创建新的线程,线程池中的线程最大数量是Integer.MAX_VALUEint类型的最大值。如果线程的处理速度小于任务的提交速度时,会不断创建新的线程来执行任务,这样有可能会因为创建过多线程而耗尽CPU 和内存资源。

    §  Executors.newFixedThreadPool(int nThreads);
    通过传入的int类型参数来指定创建线程池中的线程数,如果任务数量大于线程数量,则任务会进行等待。

    §  Executors.newCachedThreadPool();
    会根据需要创建新线程的线程池,如果线程池中的线程数量小于任务数时,会创建新的线程,线程池中的线程最大数量是Integer.MAX_VALUEint类型的最大值。如果线程的处理速度小于任务的提交速度时,会不断创建新的线程来执行任务,这样有可能会因为创建过多线程而耗尽CPU 和内存资源。

    原子性:即一个操作或多个操作执行过程中不会被任何因素打断

    例如:

    1 int x = 1;//原子性
    2 int y = x;//读取x,赋值y,非原子性
    3 x++;//读取x,自增1,非原子性
    4 x = x + 1;//读取x,加1,非原子性
  • 相关阅读:
    tomcat源码springboot搭建的跑包含websocket的项目
    tomcat源码ant编译
    职责链设计模式最简单的实例
    完美解决asp.net core 3.1 两个AuthenticationScheme(cookie,jwt)共存在一个项目中
    基于领域驱动设计(DDD)超轻量级快速开发架构(二)动态linq查询的实现方式
    Html5 在手机端 input 默认弹出英文键盘
    Html Table 表格 画斜线
    多个单列索引和联合索引的区别
    springboot常用功能
    前端代码评审(Code Review)
  • 原文地址:https://www.cnblogs.com/feichangnice/p/10647595.html
Copyright © 2011-2022 走看看