JUC概述

article/2025/9/19 18:23:49

JUC是什么?

JUC就是java.util.concurrent,java.util.concurrent.atomic和java.util.concurrent.locks三个工具类包,它们是处理线程的工具包,最开始出现是从JDK 1.5开始出现。(JUC就是java.util.concurrent工具类的首字母,简称JUC)
在这里插入图片描述

JUC的三大部分

JUC包括三大部分:Sychronized,Lock,线程池三大部分。接下来的文章会以此更新,希望大家多多关注,有任何疑问可以在评论区提出来哦。

线程和进程

在这里插入图片描述
在这里插入图片描述

进程:一个程序,qq.exe 等程序的集合,一个进程往往至少包含一个线程!
线程:是进程中的实际运作单位,你用qq聊天,实现了发送功能就是一个线程。
Tip:JAVA默认是拥有两个线程,main和GC线程。

并发和并行

并发:假如CPU单核,那么多个线程交替执行就是并发,好比你吃完饭再上厕所,上完厕所再睡觉。吃饭,上厕所,睡觉是由你一个人交替做的,你不可能同时完成。(边上厕所,边吃饭,边睡觉?怕只有路飞能做到了,hhh)在这里插入图片描述
并行:就是CPU多核情况下可以实现的,例如边聊天边看短视频边听音乐,这就是并行,它们这些任务可以同时被实现。

线程的六种状态

线程状态
NEW线程尚未启动
RUNNABLE线程可以运行
BLOCKED线程阻塞
WAITING线程等待
TIMED_WAITING有指定时间的线程等待
TERMINATED线程终止
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;}

Wait和Sleep的区别

  1. Wait来自Object类,Sleep来自Thead类在这里插入图片描述
    在这里插入图片描述
  2. wait 会释放锁,sleep 睡觉了,既然睡觉了,它就不会释放锁!就像一个人一样,wait是等着的,人是醒的,而sleep是睡着了的。
  3. 使用的范围不同
    wait必须是在同步代码块中,sleep是可以在任何地方实现的。

为什么建议使用Runnable接口

继承Thread类的,我们相当于拿出三件事即三个卖10张票的任务分别分给三个窗口,他们各做各的事各卖各自的10张票各完成各的任务,因为MyThread继承Thread类,所以在new MyThread的时候,在创建三个对象的同时创建了三个线程;

实现Runnable接口的, 相当于是拿出一个卖10张票的任务给三个窗口共同去完成,new MyThread相当于创建一个任务,然后实例化三个Thread,创建三个线程即安排三个窗口去执行。

在我们刚接触的时候可能会迷糊继承Thread类和实现Runnable接口实现多线程,其实在接触后我们会发现这完全是两个不同的实现多线程,一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。

其实在实现一个任务用多个线程来做也可以用继承Thread类来实现只是比较麻烦,一般我们用实现Runnable接口来实现,简洁明了 。

大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类(Thread)创建子类。


http://chatgpt.dhexx.cn/article/yVrUteUc.shtml

相关文章

JUC系列一:什么是JUC

前言&#xff1a;笔记整理参考尚硅谷周阳老师在B站上的JUC教程&#xff0c;万分感谢周阳老师。有兴趣的朋友可以在B站搜索周阳老师的视频教程&#xff0c;绝对让你受益匪浅&#xff0c;期望未来也能成为像周阳老师那样的人O(∩_∩)O哈哈~。 JUC B站视频地址 https://www.bilib…

01_JUC概述

1. JUC是什么&#xff1f; 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包&#xff0c;在此包中增加了在并发编程中很常用的工具类。此包包括了几个小的、已标准化的可扩展框架&#xff0c;并提供一些功能实用的类&#xff0c;没有这些类&#xff0c;一些功能会很难实现或…

JUC系列(三)

1、Java内存模型 1.1、什么是Java内存模型JMM&#xff1f; JMM(Java内存模型Java Memory Model&#xff0c;简称JMM)本身是一种抽象的概念并不真实存在&#xff0c;它仅仅描述的是一组约定或规范&#xff0c;通过这组规范定义了程序中(尤其是多线程)各个变量&#xff08;包括…

JUC系列——基础知识 day1-1

JUC系列——基础知识 day1-1 JUC基础知识进程线程进程和线程区别并行与并发同步使用场景 异步使用情景 QuickStart&#xff08;new Thread方式创建新线程&#xff09;匿名内部类方式lambda简化 Thread类&#xff08;仅分析功能&#xff09;优先级常量方法&#xff08;常用&…

JUC系列(六)

1、AbstractQueuedSynchronizer之AQS AbstractQueuedSynchronizer简称为AQS&#xff0c;抽象的队列同步器 AQS&#xff1a;是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石&#xff0c;使用一个int类变量表示持有锁的状态&#xff0c;通过内置的FIFO队列…

JUC系列(一)

1、为什么多线程极其重要&#xff1f; ​ 多线程变得极其重要的原因从软硬件两个方面来说&#xff0c;首先硬件方面&#xff1a;主要是摩尔定律失效&#xff0c;它是由英特尔创始人之一Gordon Moore(戈登摩尔)提出来的,其内容是当价格不变时&#xff0c;将每隔18个月&#xff…

JUC系列(一)什么是JUC?

多线程一直Java开发中的难点&#xff0c;也是面试中的常客&#xff0c;趁着还有时间&#xff0c;打算巩固一下JUC方面知识&#xff0c;我想机会随处可见&#xff0c;但始终都是留给有准备的人的&#xff0c;希望我们都能加油&#xff01;&#xff01;&#xff01; 沉下去&#…

JUC系列——JUC入门及多线程并发

文章目录 前言一、JUC简介1、出自哪位大神之手&#xff1f;2、JUC是什么&#xff1f; 二、JUC主要解决什么问题&#xff1f;1、进程 、线程2、并发、并行3、JAVA创建线程的方式&#xff08;模拟三种线程实现方式&#xff09;1&#xff09;继承Thread类&#xff08;线程的初级用…

Java进阶|JUC系列(持续更新)

文章目录 1、什么是J.U.C2、进程、线程、协程2.1 简介2.2 线程有几个状态2.3 wait和sleep的区别 3、Lock锁(重点)3.1 简介3.2 lock锁和synchronized有什么区别 4、生产者和消费者问题4.1 简介4.2 使用synchronized实现的demo4.3使用Lock实现的demo 5、锁的是谁问题1、两个线程访…

莱布尼茨公式C语言编程,高等数学——手撕牛顿莱布尼茨公式

本文始发于个人公众号&#xff1a;TechFlow&#xff0c;原创不易&#xff0c;求个关注 今天是高等数学专题的第13篇文章&#xff0c;我们来看看定积分究竟应该怎么计算。 定积分的实际意义 通过之前的文章&#xff0c;我们基本上熟悉了定积分这个概念和它的一些简单性质&#x…

[计算机数值分析]牛顿插值公式

Spring-_-Bear 的 CSDN 博客导航 埃特金算法虽然具有承袭性&#xff0c;但其算式是递推型的&#xff0c;不便于进行理论上的分析。所以采用具有承袭性的显式的牛顿插值公式是不错的选择。 p n ( x ) f ( x 0 ) f ( x 0 , x 1 ) ( x − x 0 ) . . . f ( x 0 , x 1 , . . . …

如何用计算机做牛顿迭代公式,牛顿迭代法

牛顿迭代法(Newtons method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 中文名 牛顿迭代法 外文名 Newtons method别 名 牛顿-拉夫逊(拉弗森)方法 提出时间 17世纪 牛顿迭代法产生背景 编辑…

牛顿恒等式 牛顿和

前言&#xff1a;仅个人小记。该恒等式推导逻辑非常简洁。目标&#xff1a;求一个多项式的所有根的次幂和。比如多项式 P ( x ) Σ i 0 n a i x i P(x)\Sigma_{i0}^{n}a_i x^i P(x)Σi0n​ai​xi的根为 α , β , . . . , ω \alpha,\beta,...,\omega α,β,...,ω&#xff…

牛顿插值公式

均差&#xff08;差商&#xff09; f[x0,x1]f(x1)−f(x0)x1−x0 一阶 f[x0,x1,x2]f(x1,x2)−f(x0,x1)x2−x0 二阶 ⋮ 性质 1.对上述二解均差展开&#xff0c;得&#xff0c; f[x0,x1,x2]f(x0)(x0−x1)(x0−x2)f(x1)(x1−x0)(x1−x2)f(x2)(x2−x0)(x2−x1) 依次类推 有&am…

5.3 牛顿-科茨公式

学习目标&#xff1a; 理解微积分基础知识&#xff0c;例如导数和微分的概念。学习牛顿-科茨公式的推导过程。这个公式实际上是使用泰勒公式对被积函数进行展开&#xff0c;并使用微积分的基本原理进行简化得到的。学习如何使用牛顿-科茨公式进行数值积分。这通常涉及到将被积…

牛顿迭代公式

问题背景 给定任意一个数x&#xff0c;求其平方根z&#xff0c;平方误差小于0.001。 这个问题直观的去想&#xff0c;我们一般会采取设定一个初始值&#xff0c;然后通过迭代逐渐逼近平方根&#xff0c;但是初始值怎样去迭代才能更快”逼近“成为关键问题&#xff0c;牛顿迭代…

人工智能数学基础---定积分3:微积分基本公式(牛顿-莱布尼茨公式)

一、引言 在《人工智能数学基础—定积分1&#xff1a;定积分的概念以及近似计算》介绍了利用定积分的定义进行定积分的近似计算方法&#xff0c;但这种方式比较复杂&#xff0c;如果被积函数复杂困难更大&#xff0c;那么定积分是否有其他计算方式呢&#xff1f;答案是肯定的&…

二分法求解方程的根java_【数值分析】利用二分法和牛顿公式求解方程的根

1.实验内容 ​分别利用牛顿公式和二分法对某一方程(此实验是以开方公式为准&#xff0c;即x2-c0,在验证时取c115)进行求解。且对两者的求解结果进行比较&#xff0c;比较两者的迭代次数和精度。 分别编写函数Binary(min, max, times)和 Newton(x0, times)实现以上两种方法。实验…

验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度

文末有代码&#xff0c;大家可以自己跑一下&#xff0c;体会一下牛顿法的运算过程 二、实验目的&#xff1a; a.验证牛顿公式的局部收敛性&#xff1b; b.比较二分法与牛顿公式的收敛速度&#xff1b; c.验证求解结果的正确性&#xff1b; 三、实验内容 a.在验证牛顿公式的…