1、JUC概述

article/2025/10/12 8:47:34

1.1 什么是JUC

在Java中,线程部分是一个重点,本篇文章说的JUC 也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5开始出现的。·

1.2 线程和进程的概念

进程和线程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

总结来说:

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程是资源分配的最小单位

线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程时程序执行的最小单位

线程的状态

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. sleep是Thread的静态方法;wait是Object的方法,任何对象实例都能调用。

2. sleep不会释放锁,它也不需要占用锁;wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)

3. 它们都可以被interrupt方法中断

串行、并行和并发

串行:多个任务按顺序一个一个的执行。

并行:指的是在同一时刻,任务可以同时开始进行,彼此之间没有依赖关系。

典型案例:烧水泡方便面

并发:同一时刻多个线程在访问同一个资源,多个线程争对一个点。

典型案例:电商秒杀

管程

管程:对于cpu来说就是一个监视器(Monitor),对于java来说就是我们常用的锁,管程它是一种同步机制,保证同一个时间,只有一个线程访问被保护数据或者代码。JVM的同步是基于进入和退出,使用管程对象来实现,进入的时候加锁,退出就解锁。

用户线程和守护线程

用户线程

我们平时创建的线程都是用户线程。主线程结束了,用户线程还在运行,jvm存活。

public class Test {public static void main(String[] args) {Thread thread = new Thread(new Runnable() {public void run() {System.out.println("线程名称:"+Thread.currentThread().getName() + " 是否为守护线程:" + Thread.currentThread().isDaemon());while (true){}}},"aa");thread.start();System.out.println("线程名称:"+Thread.currentThread().getName() + " 是否为守护线程:" + Thread.currentThread().isDaemon());}
}

守护线程

比如垃圾回收。如果没有了用户线程,都是守护线程,jvm结束

public class Test {public static void main(String[] args) {Thread thread = new Thread(new Runnable() {public void run() {System.out.println("线程名称:"+Thread.currentThread().getName() + " 是否为守护线程:" + Thread.currentThread().isDaemon());while (true){}}},"aa");//设置线程为守护线程thread.setDaemon(true);thread.start();System.out.println("线程名称:"+Thread.currentThread().getName() + " 是否为守护线程:" + Thread.currentThread().isDaemon());}
}

总结

守护线程都是为 JVM 中所有用户线程的运行提供便利服务: 只要当前 JVM 实例中尚存在任何一个用户线程没有结束,守护线程就全部工作;只有当最后一个用户线程结束时,守护线程随着 JVM 一同结束工作。

说白了:守护线程就是来守护用户线程的,如果用户线程都没有了,那守护线程也就没有存在的意义了。

 


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

相关文章

JUC基础【万字篇】

JUC 1、什么是JUC JUC&#xff1a;指的是java.util三个并发编程工具包 java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks 实现多线程的四种方式&#xff1a; 继承Thread类实现Runnable接口实现Callable接口线程池 业务&#xff1a;普通的线程代…

java--JUC快速入门(彻底搞懂JUC)

java–JUC快速入门&#xff08;彻底搞懂JUC&#xff09; 文章目录 java--JUC快速入门&#xff08;彻底搞懂JUC&#xff09;1、学习多线程之前需要知道的一些概念。2、JUC的结构3、Lock锁(重点)4、集合类不安全5、Callable()6、常用的辅助类7、读写锁8、阻塞队列9、线程池 1、学…

Dbeaver做数据迁移

1、选择源头数据库的表、鼠标右击、选择导出数据 2、在数据转化弹框中&#xff0c;双击 ‘数据库&#xff0c;数据表’ 那一栏 3、选择目标数据库&#xff0c;调整字段类型映射关系 4、调整字段的映射关系 目前遇到的字段类型&#xff0c;只有 int&#xff0c;bigint 转 num…

dbeaver工具连接达梦数据库

、一 概述 DBeaver 是一个基于 Java 开发&#xff0c;免费开源的通用数据库管理和开发&#xff0c;DBeaver 采用 Eclipse 框架开发&#xff0c;支持插件扩展&#xff0c;并且提供了许多数据库管理工具&#xff1a;ER 图、数据导入/导出、数据库比较、模拟数据生成等&#xff0…

DBeaver 格式化sql

有时候我们拿到了一条sql语句是长长的&#xff0c;非常不容易阅读&#xff0c;这时我们就想说哪里可以格式下sql代码。 方法有很多种&#xff0c;这里我就用Dbeaver来格式化sql。 ①打开Dbeaver ②复制sql代码到SQL编辑器中&#xff0c;并选中 ③按ctrlshiftF&#xff0c;即…

【DBeaver】常用自定义设置

文章目录 背景一、用户界面设置1.1、22.3.4版本1.1.1、SQL编辑器-字体设置1.1.2、查询结果-字体设置 1.2、23.0.0版本1.2.1、应用字体&#xff08;导航栏等&#xff09;1.2.2、文本字体&#xff08;SQL输出、文本编辑器等&#xff09; 二、常规设置2.1、连接类型设置/环境设置 …

DBeaver导入Excel数据

目录 前言 导入准备 ​导入步骤 1.选中数据库表&#xff0c;右键&#xff0c;然后点击导入数据 2.双击CSV,选择待导入的文件 3.修改编码格式&#xff08;可选&#xff0c;不乱码不用&#xff09; 4.点击下一步&#xff0c;修改列的类型 5.一直下一步&#xff0c;点击…

Dbeaver基本使用

1&#xff1a;与plsql相比&#xff0c;Dbeaver没有右击直接查看表注释的功能&#xff0c;但是Dbeaver提供了一个“打开声明”的功能&#xff0c;里面可以查看一些比较实用的内容&#xff1a;表列注释、创建该表的create语句&#xff1a; 2&#xff1a;在一般开发的情况下&#…

【大数据】Hive可视化工具dbeaver

Hive可视化工具dbeaver 1、dbeaver基本介绍 dbeaver是一个图形化的界面工具&#xff0c;专门用于与各种数据库的集成&#xff0c;通过dbeaver我们可以与各种数据库进行集成通过图形化界面的方式来操作我们的数据库与数据库表&#xff0c;类似于我们的sqlyog或者navicat。 2、…

DBeaver安装及使用手册

一、DBeaver安装 1、在[DBeaver官网](https://dbeaver.io/download)进行数据库工具下载&#xff0c;下载好后双击运行2、选择语言后&#xff0c;点击OK 3、点击下一步 4、接受许可 5、选择可使用者&#xff0c;然后点击下一步 6、选择组件&#xff0c;一般选择默认即可 7…

DBeaver-Driver-All ( DBeaver驱动包,所有JDBC驱动整合包)

DBeaver-Driver-All DBeaver-Driver-All ( DBeaver驱动包 )整合所有DBeaver的JDBC驱动包&#xff0c;供DBeaver使用&#xff0c;无需每次都搜索和下载&#xff0c;只需clone本项目即可&#xff0c;一个包包含几乎所有的驱动&#xff0c;如果有缺漏的驱动欢迎提Issue补充。 DBe…

DBeaver 下载安装

1 下载地址(我下载的 Windows版本&#xff0c;根据系统需要选择版本) Releases dbeaver/dbeaver GitHubFree universal database tool and SQL client. Contribute to dbeaver/dbeaver development by creating an account on GitHub.https://github.com/dbeaver/dbeaver/rel…

DBeaver 安装

DBeaver 目录 DBeaver1、介绍2、发展史3、版本介绍4、下载与安装5、DBeaver 连接数据库&#xff08;MySql&#xff09;6、DBeaver 连接数据库&#xff08;Hive&#xff09;7、DBeaver 功能简介 1、介绍 DBeaver是一种通用数据库管理工具&#xff0c;适用于需要以专业方式使用数…

DBeaver驱动安装

最近打算用DBeaver它来查看SQLite文件&#xff0c;需要安装驱动&#xff0c;总是安装不上有点苦恼 下载驱动的时候可能会出现如下提示&#xff1a; Can’t create driver instance Error creating driver ‘SQLite’ instance. Most likely required jar files are missing. …

使用 DBeaver 导入数据

如何上传数据 在开始使用 DBeaver 之前&#xff0c;用户 以 excel 格式收集了有关电视剧的信息。他的文件已经包含所有必要的列&#xff0c;但我们的英雄不想将其中一些列传输到数据库&#xff0c;因为它们是为他个人使用而创建的&#xff0c;与站点访问者无关。要仅快速加载网…

Dbeaver配置迁移

换电脑了,希望Dbeaver中的连接也一起带过去 但在Dbeaver中找了一圈,没找到可以导出配置的功能 搜了一圈资料并自己尝试,发现配置文件保存在两个文件中,只要把老电脑的这两个文件换到新电脑中就能迁移数据库连接配置

DBeaver 超级详细的安装与使用

一、下载DBeaver DBeaver是一种通用数据库管理工具&#xff0c;适用于需要以专业方式使用数据的每个人&#xff1b;适用于开发人员&#xff0c;数据库管理员&#xff0c;分析师和所有需要使用数据库的人员的免费(DBeaver Community) 的多平台数据库工具。 DBeaver支持80多个数据…

DBeaver安装与使用教程(超详细安装与使用教程)

文章预览&#xff1a; DBeaver安装与使用教程&#xff08;超详细安装与使用教程&#xff09;一、DBeaver安装教程①下载地址②图文安装教程 二、DBeaver使用教程①mysql数据库为例1>填写数据库信息2>常用基本功能 DBeaver安装与使用教程&#xff08;超详细安装与使用教程…

DBeaver下载安装教程

一、简单介绍 DBeaver是一款很好用的数据库连接工具&#xff0c;免费的&#xff0c;支持100多种数据库&#xff08;基本上看得见的数据库不管是关系型还是非关系型的都可用&#xff09; 不过可能需要下载驱动&#xff0c;如果驱动下载不了&#xff0c;连接失败&#xff0c;则…

dbeaver(下载、安装图文过程)

能够帮助你们解决问题是博主的荣幸&#xff0c;你们的支持是我创作的最大动力&#xff01;:)欢迎关注点赞 文章目录 一、dbeaver下载二、dbeaver安装总结 一、dbeaver下载 提示&#xff1a;安装之前需要先确认好自己需要哪个版本的maven&#xff0c;避免浪费时间。 官网下载&am…