什么是JUC

news2025/1/16 7:45:00

什么是JUC

    JUC指的是:Java里的三个包

  • java.util.concurrent
  • java.util.concurrent.atomic:原子性
  • java.util.concurrent.locks:lock锁

 

回顾线程和进程

进程

        程序执行的一次过程,一个进程包含一个或多个线程。进程是资源分配的单位

线程

        可以指程序执行过程中,负责实现某个功能的单位。线程是CPU调度和执行的单位

并发

        同一时刻,多个线程交替执行。(一个CPU交替执行线程)

并行

        同一时刻,多个线程同时执行。(多个CPU同时执行多个线程)

    查询cpu核数

public class Test1 {
    public static void main(String[] args) {
        //查询cpu核数
        //CPU 密集型,IO密集型
        System.out.println(Runtime.getRuntime().availableProcessors());
    }
}

并发编程的本质

        并发编程的本质是充分利用cpu资源。

    问题:Java真的可以开启线程吗

        不可以。Java创建Thread类调用start方法,底层是把线程放到一个组里面,然后调用一个本地方法start0;方法底层是C++;Java无法操作硬件

Thread部分源码

public synchronized void start() {
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }

    //本地方法,底层的C++ java无法直接操作硬件
    private native void start0();

多线程回顾

线程的几种状态

        新生状态、运行状态、阻塞状态、等待状态(死等)、超时等待状态(过期不候)、停止状态

    Thread.State的源码

public enum State {
        /**
         * Thread state for a thread which has not yet started.
         */
         // 新生
        NEW,
        /**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */
         // 运行
        RUNNABLE,
        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
         // 阻塞
        BLOCKED,
        /**
         * Thread state for a waiting thread.
         * A thread is in the waiting state due to calling one of the
         * following methods:
         * <ul>
         *   <li>{@link Object#wait() Object.wait} with no timeout</li>
         *   <li>{@link #join() Thread.join} with no timeout</li>
         *   <li>{@link LockSupport#park() LockSupport.park}</li>
         * </ul>
         *
         * <p>A thread in the waiting state is waiting for another thread to
         * perform a particular action.
         *
         * For example, a thread that has called <tt>Object.wait()</tt>
         * on an object is waiting for another thread to call
         * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
         * that object. A thread that has called <tt>Thread.join()</tt>
         * is waiting for a specified thread to terminate.
         */
         // 等待,死死的等待
        WAITING,
        /**
         * Thread state for a waiting thread with a specified waiting time.
         * A thread is in the timed waiting state due to calling one of
         * the following methods with a specified positive waiting time:
         * <ul>
         *   <li>{@link #sleep Thread.sleep}</li>
         *   <li>{@link Object#wait(long) Object.wait} with timeout</li>
         *   <li>{@link #join(long) Thread.join} with timeout</li>
         *   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
         *   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
         * </ul>
         */
         // 超时等待
        TIMED_WAITING,
        /**
         * Thread state for a terminated thread.
         * The thread has completed execution.
         */
         // 终止
        TERMINATED;
    }

sleep和wait的区别

  1. sleep是Thread类的本地方法;wait是Object类的方法。
  2. sleep不释放锁;wait释放锁。
  3. sleep可以使用在任何地方;wait必须在同步代码块中
  4. sleep不需要和synchronized关键字一起使用;wait必须和synchronized代码块一起使用。
  5. sleep不需要被唤醒(时间到了自动退出阻塞);wait需要被唤醒。
  6. sleep一般用于当前线程休眠,或者轮循暂停操作;wait则多用于多线程之间的通信。
  7. sleep和wait都需要捕获异常

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

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

相关文章

【毕业设计】深度学习行人重识别系统 - person reid

文章目录0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图4 实现效果5 部分代码6 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问…

Linux NetCore下Pdf转图片 内存溢出

Linux NetCore下Pdf转图片 内存溢出Linux PDF转图片异常查看libgdiplus版本解决方案NetCore 3.1下面调用Pdf转图片的组件&#xff0c;在本地windows环境下转换正常&#xff0c;但是到容器里面就会转换失败&#xff0c;查看命令行日志可以看到如下错误。 Linux PDF转图片异常 …

web期末大作业:基于html+css+js制作 学校班级网页制作----校园运动会 4页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园班级网页设计 | 我的班级网页 | 我的学校 | 校园社团 | 校园运动会 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 …

source 命令的用法(与 sh Filename、./Filename的区别)

source 命令简单来说&#xff0c;就是读取脚本里的语句&#xff0c;并在当前Shell中执行&#xff0c;脚本里面所有新建、改变变量的语句都会保存在当前shell里。 目录 1、source 命令的使用方法 2、source命令的妙用 3、source Filename 和 ./Filename的区别 1、source 命令…

12期数据分析-第5次数据分析作业-pandas数据清洗--第 课讲解

1.册除每列都为NAN的数据&#xff0c;以下操作正确的是单法题 选B&#xff1a; 2.&#xff1f;离散化就是将连续值进行分区间 选C 3.以下方法中可以修改索引名称的是多选 选ABCD。 df.index.map({0:‘A1’,1:‘B1’,2:‘C1’}) 4.&#xff1f;求4个人的平均分数 选BCD .…

docker安装es+mac安装Kibana工具

一、docker安装es 1、下载镜像 docker pull elasticsearch:7.9.0下载完后&#xff0c;查看镜像 docker images​​ 2、启动镜像 docker network create esnetdocker run -d --name es -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.typesingle-node&…

2022 弱口令安全实验室招新赛-靶机挑战记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、ubuntu 代码执行getshell获取webshell二、server 2008r2EW 流量代理ms17010三、AD机器账号伪造漏洞域内hash传递攻击登录域控总结前言 2022 弱口令安全实验…

Chakra UI Pro (Marketing + Application UI + ECommerce)

Chakra UI Pro (Marketing Application UI ECommerce) 快速创建可访问的 React 应用 程序 Chakra UI 是一个简单、模块化且可访问的组件库&#xff0c;它为您提供构建 React 应用程序所需的构建块。 更少的代码。更快的速度 花更少的时间编写 UI 代码&#xff0c;将更多的时间…

ZYNQ之嵌入式学习----开篇实验Hello World

1 ZYNQ 嵌入式系统的开篇实验Hello World 阅读本文需先学习: FPGA学习----Vivado软件使用 1.1 ZYNQ 嵌入式系统开发流程 创建Vivado工程使用IP Integrator 创建 Processor System生成顶层HDL生成比特流&#xff0c;导出到SDK在SDK中创建应用工程板级验证 开篇实验任务是在 …

【前端笔记】小记一次Antd Vue 1.x (for vue2.x) icons组件按需引入的实现

因为项目有样式规范要求&#xff0c;和规范最相似的就是antd了&#xff0c;再加上项目用的是2.x&#xff0c;所以使用antd 1.x版本进行开发。项目完成后&#xff0c;理所应当对打包进行优化&#xff0c;于是遇到了icons组件全量引入的问题&#xff0c;查找了资料实现后特地记录…

R语言作业--第六章判别分析

目录 思考题4&#xff09;原题目&#xff1a;贝叶斯判别的基本思想是什么&#xff1f; 练习题第3题:以舒张期血压和讯将胆固醇含量预测被检查者是否患冠心病&#xff0c;测得15名冠心病人和16名健康人的舒张压。X1及血浆胆固醇含量X2&#xff0c;结果如表6-4。 练习题第4题:…

Day03 leecode#有效的括号#合并两个有序链表

题目描述&#xff1a; 有效的括号 给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必…

大模型相关资料整理

1. 大模型的挑战 GPT-3 175B模型的参数如下&#xff1a; 网络层&#xff08;Number of layers&#xff09;: 96 句子长度&#xff08;Sequence length&#xff09;: 2048 隐藏层大小&#xff08;Hidden layer size&#xff09;: 12288 词汇表&#xff08;Vocabulary size&#…

java高级--SpringBoot篇

目录 一、什么是SpringBoot 二、SpringBoot的特点 三、springboot快速入门 四、介绍配置文件的种类 五、开发环境配置文件的切换 六、读取springboot配置文件中的内容 七、Springboot注册web三大组件 八、SpringBoot的底层原理 8.1 包扫描的原理 8.2 springboot自动装配原理…

如何备考高级软考的系统架构设计师?

架构设计师是软考高级科目&#xff0c;比较难&#xff0c;每一年的通过率在15%左右。 不过软考它的特点是考察的深度不深&#xff0c;但是范围比较广&#xff0c;特别是高级&#xff0c;对项目经验比较看重&#xff0c;如果没有项目经验的朋友&#xff0c;一定要多准备项目素材…

springboot10:web开发常用功能(拦截器,文件上传,异常处理)

一.拦截器 1.使用 访问任何请求&#xff0c;都只有登录才能访问&#xff0c;挨个写入请求太困难&#xff0c;使用拦截器机制handlerIntercepter&#xff08;prehandle方法&#xff0c;posthandle方法,afterCompletion方法&#xff09;编写一个拦截器实现handlerInterceptor接…

算法与数据结构 - 字节跳动笔试题

😄这里将持续更新接下来做过的字节跳动公司相关的笔试题,包括网上收集的秋春招笔试题、以及自己参加的字节举办的编程赛的题目。 🚀导航: ID题目描述NO.1小红走迷宫简单、按逻辑写即可ACNO.2铺水管dfs回溯、注意剪枝才能ACNO.3喵汪故事借助二分才能ACNO.4小超的游戏pytho…

学术论文写作以及discussions/results与conclusion的区别

经验帖 | 如何写SCI论文&#xff1f; Result、Discussion和Conclusion区别解析 如何写学术论文 一篇论文只能有一个主题&#xff0c;不能出现过多的研究问题&#xff0c;这样只会让文章读起来很乱。就像大牛经常讲的&#xff0c;“one paper, one story”&#xff0c;一篇论文…

unix/linux make

GNU:make 参考文档 程序的编译和链接 一般来说&#xff0c;无论是C还是C&#xff0c;首先要把源文件编译成中间代码文件&#xff0c;在Windows下也就是 .obj 文件&#xff0c;UNIX下是 .o 文件&#xff0c;即Object File&#xff0c;这个动作叫做编译&#xff08;compile&…

HummerRisk V0.5.1 发布:新增对象存储、优化K8s 资源态势和资源拓扑等

HummerRisk V0.5.1 发布&#xff1a;新增对象存储对接查看功能&#xff0c;增加 K8s 资源的部署信息查看&#xff0c;深度优化K8s 资源拓扑&#xff0c;并优化了镜像检测、云检测及资源态势同步等多个内容。 感谢社区中小伙伴们的反馈&#xff0c;你们的认可是我们前进的动力。…