juc-1-进程/线程/创建线程代码

news2025/1/13 17:28:31

1 场景:

1:执行的任务,短而快。不能是很耗时的任务。

2:异步写日志(日志框架底层就是)。

3:异步发送邮件,短信。 用MQ 最好。

4:多线程下载

2 进程与线程

进程:

 进程:

1:cpu从硬盘中读取一段程序到内存中,该执行程序的实例就叫进程。

2:一个程序如果被cpu多次读取到内存中,则变成多个独立的进程

线程:

1:线程是程序执行的最小单位,在一个进程中,可以有多个线程同时执行。

 

线程:

1:单核的cpu上每次只能够执行一次线程,如果在单核的cpu上开启了多线程,则会发生对每个线程轮流执行,也就是我们说的  (上下文切换)。

2:Cpu每次单个计算的时间称为一个cpu时间片,实际只有几十毫秒 人为感觉好像是多线程。

3:对于多线程来说,存在等待cpu调度的时候,该线程状态是为就绪状态,如果被cpu调度,则该线程状态为运行状态。当cpu切换其他线程时,它则又会变成就绪状态。

 

3 创建线程的方式 (推荐我的另一篇 实际使用jdk1.8 方式)

3.1 无返回值

  继承Thread

public class ThreadDemo extends Thread{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"我是子线程");
    }
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
        new ThreadDemo().start();
/*      main
        Thread-0我是子线程 */
    }
}

实现Runnable接口

public class ThreadRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"我是子线程");
    }
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
       new Thread(new ThreadRunnable()).start();
/*      main
        Thread-0我是子线程 */
    }
}

匿名内部类/jdk8方式

    public static void main(String[] args) {
        /**
         * 匿名内部类方式
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"我是匿名内部类子线程");
               //Thread-0我是匿名内部类子线程
            }
        }).start();

        /**  jdk8 形式
         *
          */
       new Thread(()->{
           System.out.println(Thread.currentThread().getName()+"我是jdk8子线程");
           //Thread-1我是jdk8子线程
       }).start();
        /**
         * 指定线程名称
         */
        new Thread(()->
            System.out.println(Thread.currentThread().getName()+"我是指定线程名子线程"),"订单线程"
            //订单线程我是指定线程名子线程
        ).start();
    }

3.2 有返回值

Callable 方式一(匿名内部类方式+线程池) 推荐

   @Autowired com.example.juc.mapper.TechnicalReviewMapper TechnicalReviewMapper;
    @RequestMapping("/test")
    public TechnicalReview test() throws ExecutionException, InterruptedException {
        //创建线程池
        ExecutorService pool = new ThreadPoolExecutor(2, 20, 2000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
        //创建任务
        FutureTask<TechnicalReview> futureTask = new FutureTask<TechnicalReview>(new Callable<TechnicalReview>() {
            @Override
            public TechnicalReview call() {
                TechnicalReview technicalReview = TechnicalReviewMapper.selectByPrimaryKey(1L);
                return technicalReview;
            }
        });
        //把任务给线程池
        pool.submit(futureTask);
        //获取执行结果
        TechnicalReview event = futureTask.get();
        //优雅关闭 (实际不会这么用线程池)
        pool.shutdown();
        return event;
    }

Callable 方式二(不推荐,要用非常老的方式 调用sql, 不能使用spring管理的类)

@Component
public class ThreadCallable implements Callable<TechnicalReview> {
    @Autowired
    com.example.juc.mapper.ReviewMapper TechnicalReviewMapper;

    @Override
    public TechnicalReview call() throws Exception {
        System.out.println("call=="+Thread.currentThread().getName());
        //报空指针
        TechnicalReview technicalReview = TechnicalReviewMapper.selectByPrimaryKey(1L);
        return technicalReview;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ThreadCallable threadCallable = new ThreadCallable();
        FutureTask<TechnicalReview> technicalReviewFutureTask = new FutureTask<>(threadCallable);
         new Thread(technicalReviewFutureTask).start();
        TechnicalReview technicalReview = technicalReviewFutureTask.get();
        System.out.println(technicalReview);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centerfusion算法环境配置及模型训练

Centerfusion算法环境配置及模型训练概述1. 配置conda环境1.1 新建conda环境1.2 安装cuda1.3 安装cudnn1.4 安装pytorch1.5 安装cocoapi2. 配置Centerfusion2.1 克隆CenterFusion的github库2.2 安装依赖包2.3 安装DCNv22.4 下载nuscenes-devkit包3. 数据集准备3.1 下载数据集3.…

细粒度图像分类论文研读-2019

文章目录Cross-X Learning for Fine-Grained Visual Categorization&#xff08;by end-to-end&#xff09;AbstractIntroductionApproachPreliminariesCross- Category Cross-Semantic RegularizerCross-Layer RegularizerOptimizationLearning a Mixture of Granularity-Spec…

公司刚来的京东架构师:看完我写的 spring 笔记,甩给了我一份文档

Spring 是分层的 full-stack&#xff08;全栈&#xff09; 轻量级开源框架&#xff0c;以 IoC 和 AOP 为内核&#xff0c;提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术&#xff0c;还能整合开源世界众多著名的第三⽅框架和类库&#xff0c;已经成为使⽤最多…

优维助力国内某省级商业银行同城异地灾备自动化建设

银监会在《商业银行数据中心监管指引》中明确要求“商业银行每年至少进行一次重要信息系统专项灾备切换演练&#xff0c;每三年至少一次重要信息系统全面灾备切换演练&#xff0c;以真实业务接管为目标&#xff0c;验证灾备系统有效接管生产系统与安全回切的能力&#xff0c;并…

SpringSecurity概念以及整合ssm框架

基本概念 Spring中提供安全认证服务的框架&#xff0c;认证&#xff1a;验证用户密码是否正确的过程&#xff0c;授权&#xff1a;对用户能访问的资源进行控制 用户登录系统时我们协助 SpringSecurity 把用户对应的角色、权限组装好&#xff0c;同时把各个资源所要求的权限信息…

毕业设计-基于大数据技术的旅游推荐系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

前端基础(十一)_Float浮动、清除浮动的几种方法

浮动 1、什么是浮动&#xff1f; 目的&#xff1a;为了让多个块级元素在同一行显示&#xff1b; 文档流&#xff1a;可显示的对象在排列时所占的位置&#xff1b; 浮动&#xff1a;使元素脱离正常的文档流&#xff0c;按照指定的顺序&#xff0c;方向发生移动&#xff0c;直到…

疫情下景区管理

开发工具(eclipse/idea/vscode等)&#xff1a;idea 数据库(sqlite/mysql/sqlserver等)&#xff1a;mysql 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;模块划分&#xff1a;公告类型、公告信息、用户信息、用户咨询、地区信息、景区信息、景区开放、景区预约、统计…

【Flask框架】——17 Flask蓝图

在一个Flask 应用项目中&#xff0c;如果业务视图过多&#xff0c;可否将以某种方式划分出的业务单元单独维护&#xff0c;将每个单元用到的视图、静态文件、模板文件等独立分开&#xff1f; 例如从业务角度上&#xff0c;可将整个应用划分为用户模块单元、商品模块单元、订单…

应急响应-windows/Linux主机加固

windows/Linux主机加固 1,账户安全 首先要确保电脑上的账户均为经常使用的账户&#xff0c;要禁止Guest用户&#xff0c;禁用其他无用账户&#xff0c;一段时间后无反馈即可删除&#xff0c;同时要留意是否有隐藏账户存在。 查看本地用户和组&#xff1a;右键此电脑>计算机管…

PG::FunboxEasy

nmap -Pn -p- -T4 --min-rate1000 192.168.58.111 nmap -Pn -p 22,80,33060 -sCV 192.168.58.111 查看80端口的页面&#xff0c;未发现可用信息。 对路径进行爆破 gobuster dir -u http://192.168.58.111/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt…

Vue3 —— 使用Vite配置环境变量

文章目录 一、为什么要配置环境变量?二、在Vite中配置环境变量 1.环境变量和模式2.环境变量3.生产环境替换4.env 文件总结一、为什么要配置环境变量? 在一个产品的前端开发过程中&#xff0c;一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境&#xff0c;然…

后疫情时代,VR全景创业的应用场景有哪些?

在数字化转型的进程中&#xff0c;VR技术可以帮助各个行业领域的企业商家更便捷地搭建沉浸式服务体验&#xff0c;帮助商家提高展示以及加快企业沟通效率。后疫情时代&#xff0c;企业数字化转型加速发展&#xff0c;VR技术已经成为企业云服务的标配工具&#xff0c;因此VR全景…

半入耳蓝牙耳机什么牌子好?音质最好的半入耳式蓝牙耳机

跑步或者游泳的时候带着耳机听音乐或者有声书&#xff0c;是一家很惬意舒心的事情&#xff0c;市面上有那么多的蓝牙耳机品牌&#xff0c;很多人在选购的时候总是犯了难&#xff0c;不知道哪款耳机值得入手&#xff0c;半入二的佩戴更加舒适&#xff0c;深受很多人的喜爱&#…

用于音频信号去噪的谱相减和陷波滤波的比较(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 谱相减减少背景&#xff08;加性&#xff09;噪声影响的最流行方法之一是谱相减。背景噪声是降低录音中语音质量和清晰度的最常…

const成员和static成员详解

const成员和static成员详解1.const成员函数2.static成员&#xff08;1&#xff09;静态成员变量&#xff08;2&#xff09;静态成员函数&#xff08;3&#xff09;静态成员使用场景1.const成员函数 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函…

热点新品—类器官代谢组学

01为什么研究类器官如此重要&#xff1f; 类器官技术是近年来生物医学领域最具突破性的前沿技术之一&#xff0c;更是科技部发布了“十四五”国家重点研发计划的6个重点专项之一。因模型本身具有极高的创新性&#xff0c;深受基金申请和高分杂志的青睐。并且由于人源化类器官可…

让你室友、工友、小孩、断网的骚操作!ARP攻击演示!

前提&#xff1a; ① 、你需要 和 你室友处于同一个局域网&#xff0c;互相能ping通 ②、你需要知道你室友的IP ③、您可能需要一个linux 设备&#xff0c;手机也行&#xff08;需要安装termux 来执行命令&#xff09;、linux系统电脑、树莓派等都可以。 -----------------…

PCB入门学习—原理图的绘制2

目录 2.2 TEA5767音频模块的绘制 2.3 ENC28J60以太网模块的绘制 学习目录&#xff1a; 2.2 TEA5767音频模块的绘制 首先有个问题&#xff1a;为什么这个电容放在原理图上怎么移动也对不齐&#xff1f;&#xff1f; 解决方法&#xff1a;把原理图上的栅格这个东西设置成1mil…

【小甲鱼C语言】课后笔记第一章第七节——算数运算符

目录 1. 算术运算符 2. 何谓“目”&#xff1f; 3. 表达式 4. 类型转换 5.课后习题&#xff08;编程题&#xff09; 1. 算术运算符 C 语言通过提供大量的运算符来支持我们对数据进行处理&#xff0c;前边我们将一个值存放到变量中&#xff0c;使用的是赋值运算符&#xff…