首页 > 其他分享 >多线程基本

多线程基本

时间:2023-09-25 21:22:44浏览次数:32  
标签:基本 runable 丢弃 队列 任务 的话 线程 多线程

  • 线程与进程得关系

    一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程

    线程则是计算机中最小执行单元. 比如电脑管家这个软件就是一个进程而里面的杀毒 清理垃圾 全局守护这些功能就是一个个线程.一个进程最少拥有一个线程 .

    线程的创建方式

    一个集成两个实现

    集成thread 无返回值

    实现runable 无返回值

    实现callable 有返回值

    线程池 线程池de七大参数

    核心线程 最大线程 阻塞队列 线程存活时间 存活时间单位线程工厂 和拒绝策略

    线程池de一个执行方式首先任务提交时

    先判断是否达到核心先线程数 没到达的话创建一个核心线程来执行任务

    如果达到了则判断工作队列是否已经满了 没满的话放到工作队列中

    工作队列满了的话则判断是否达到了最大de线程数量没达到则创建一个新的线程来执行任务.

    如果最大线程数也满了则执行拒绝策略

    拒绝策略一共有四种

    2丢弃任务抛出异常(默认) 终止

    这仍是线程池的默认策略当任务不能再提交的时候抛出异常 及时反馈给程序的运行状态 . 关键任务推荐使用这样当系统使更大的并发量的时候能够通过异常及时的发现

    2丢弃任务部不抛出异常如果线程队列都满的话后续的任务都会被丢弃. 丢弃

    如果提交的任务是无关紧要的则可以使用此策略

    3第三种丢弃队列最前面的任务 然后重新提交别被拒绝的任务 丢弃老

    首先这个策略也会丢弃任务并且是没有异常提示的 基于这个特点是等后续的任务优先级更高的场景

    4第四种调用主线程处理该任务 调用运行策略

    这个方式的话只要线程池没有关闭就会提交主线程来处理 好处是不会丢弃任务 坏处是效率低有可能阻塞队列 一般用在不允许失败任务得地方.

  • 设置这些参数 一般根据任务的场景来设置 考虑到我之前的项目并发量都不是很高一般都是设置 核心50 最大 100 队列长度100保活时间30秒左右

刚创建的线程池是没有线程de根据上面的线程池流程来说得先提交任务才能创建线程.核心线程就是正在处理任务的线程如果达到了最大的线程数那么所有的线程都是核心线程数

一般使用那种方式创建thread和runable之间的区别

我一般使用实现runable

因为java是单继承继承thread的话不利于后面的拓展 然后继承yhread的话是不能实现线程变量的资源共享 runable的话也可以共享也可以补共享

实现runable和callable区别

最大的区别,runnable没有返回值,而实现callable接口的任务线程能返回执行结果 2、callable接口实现类中的run方法允许异常向上抛出,可以在内部处理,try catch,但是runnable接口实现类中run方法的异常必须在内部处理,不能抛出

线程的状态

线程一共有五种状态

新建 就绪 运行 阻塞 死亡这几种

  • 运行new 方法就还没调用shatr方法便是新状态

  • 运行run方法但cpu还没分配资源这时候便是就绪状态

  • 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。

  • 此时可以执行yield方法让出线程的cpu使用权

  • 阻塞的话就是一般是指线程被锁拦住了

    有多种1通过调用wait方法 让线程等待某工作完成

    同步阻塞的话一般是代码被synchronize同步时锁他会进入同步阻塞状态

    其他阻塞比如seleep或者join发出io请求线程也会进入阻塞状态到等待的时时间到了或者join终止超时或者io处理完毕线程就重新转入就绪状态等待cpu的分配资源

  • 死亡的话表示线程已经执行完毕或者异常退出了该方法

标签:基本,runable,丢弃,队列,任务,的话,线程,多线程
From: https://www.cnblogs.com/zhangseekchu/p/17728875.html

相关文章

  • 1、pytorch_geometric基本使用
    工具包安装方法:¶一定参考其GITHUB:https://github.com/pyg-team/pytorch_geometric(千万不要pip直接安装,肯定不行的)   In [1]:%matplotlibinlineimporttorchimportnetworkxasnximportmatplotlib.pyplotaspltdefvisualize_gra......
  • DP 简介及基本知识
    动态规划(DynamicProgramming,DP)是一种将复杂的问题分解为简单子问题的方式来解决问题的方法。动态规划中主要由两个部分组成:一为状态,二为转移。状态和转移就组成了一个有向的状态转移图。动态规划需要满足有拓扑序(当拓扑序不知道但有,可以考虑拓扑排序,找到拓扑序,或者记忆化......
  • HarmonyOS使用多线程并发能力开发
     一、多线程并发概述1、简介并发模型是用来实现不同应用场景中并发任务的编程模型,常见的并发模型分为基于内存共享的并发模型和基于消息通信的并发模型。Actor并发模型作为基于消息通信并发模型的典型代表,不需要开发者去面对锁带来的一系列复杂偶发的问题,同时并发度也相对......
  • Java NIO 底层原理的基本思想?
    作者:Java架构资深进阶链接:https://zhuanlan.zhihu.com/p/268805428来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。写在前面1.1.JavaIO读写原理1.1.1.内核缓冲与进程缓冲区1.1.2.javaIO读写的底层流程1.2.四种主要的IO模型1.3.同步......
  • 企业ERP的基本流程
    ERP是企业资源计划,ERP系统主要是优化企业内部的业务流程,用信息化管控的方式进行采购管理、库存管理、销售管理、财务管理等模块。它可以看作是进销存系统的进阶版。ERP侧重企业资源规划,无法进行生产精细化管理ERP运作流程ERP包含两类流程:计划管理和执行计划管理,计划管理包括生......
  • Python 基本语法
    在开始学习Python编程语言之前,首先要掌握基本的语法。本文将介绍Python编程语言的基本语法,帮助初学者顺利进入Python编程世界。一、Python编程语言概述Python是一种高级编程语言,具有简单易学、语法简洁、功能强大等特点。Python支持多种编程范式,包括面向对象、面向......
  • Phytium Pi OS的基本配置
    前言本文基于飞腾派OS官方文档,对操作步骤和注意事项加以补充说明。开发环境系统要求可以先运行sudoaptupdate更新软件环境。首先需要检查对应软件是否已安装,可以使用dpkg-l|grep<软件包名>来检查。下面针对给出的软件包提供脚本,可以更便捷地检查是否已安装:#!/bin/bash......
  • PostgreSQL教程:事务的ACID特性及基本使用
    什么是ACID?在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性,有ACID这一说:原子性A:事务是一个最小的执行单位,一次事务中的操作要么都成功,要么都失败。一致性C:在事务完成时,所有数据必须保持在一致的状态。(事......
  • MongoDB の 安装与基本使用
    安装mongo建议使用docker直接一键安装dockerrun--namemongo_zdp-p27017:27017-dmongo:latestGUI工具,我使用过的有两个,一个是navicate,一个是nosqlbooster。下载地址如下https://nosqlbooster.com/downloadsmysql和mogodb名称的对比mysqlMongoDB数据......
  • ansible教程:with_fileglob基本用法示例
    with_fileglob是Ansible的循环迭代器,用于在任务中对文件进行模式匹配并迭代处理。它可以用于从本地文件系统中选择匹配特定模式的文件,并将它们作为迭代项传递给任务。以下是with_fileglob的基本用法示例:-name:Processfiles<module_name>:src:"{{item}}"with_......