Java学习笔记_Day021_多线程详解(一)
Java学习笔记_Day021_多线程详解(一)
一、多线程相关的三组概念
(一)程序和进程
- 程序:一个固定的存储有逻辑和数据的集合,是一个静态的状态,存储在磁盘上
- 进程:一个正在运行着的程序,是一个动态的概念,一般运行在计算机的内存中
- 查看计算机进程:ctrl + shift +ESC
(二)进程和线程
- 进程:是一个正在运行的程序,会分配一部分系统资源,是一个独立的资源分配单位
- 线程:一条正在独立执行的路径。多线程,再执行某个程序的时候,该程序与多个子任务,每个线程都可以独立的完成其中一个子任务。在子任务之间,没有什么依赖关系,可以独立执行。
- 进程和线程的关系:
(1)进程适用于分配系统资源的单位
(2)一个进程中,可以有多条线程,但是一个进程中,至少有一条线程
(3)线程不会独立分配资源,一个进程中的所有线程,共享的是同一个进程的资源
(三)并行和并发
- 并行:在一个时间点,有多个任务(进程、线程)正在执行。多核心、多CPU变成
- 并发:在一个时间点,有多个任务同时发起。但是,在一个时间点,同时只能由一个任务正在运行。单核心、单CPU编程
- 图示
(四)Q&A:CPU在多个任务之间来回切换,效率提高了还是降低了
- 对于一个任务,毋庸置疑是降低了
- 对于整个计算机系统,效率提高了,计算机硬件的运行效率是不同的:CPU 10^-9秒,内存 10^-6秒,硬盘 10^-3 秒
二、多线程的实现方式
(一)实现多线程的第一种方式:继承方式
-
在JDK中有一个类是线程类:Thread
-
操作步骤:
(1)自定义一个类型继承Thread类
(2)在自定义类型中重写Thread类中的run方法,方法体就是将来线程的任务
(3)创建自定义类型对象,表示一条线程
(4)调用start()方法,启动线程 -
图示:
-
注意事项:线程创建好之后一定要调用start方法启动线程,否则线程不执行
代码示例
package com.csdn.day021;public class Demo01_ThreadFirstWay {public static void main(String[] args) {//3.创建一个自定义类型的对象,表示一条线程MyThread mt = new MyThread();//4.调用继承了Thread类中的start()方法,启动线程mt.start();for (int i = 1; i <= 1000; i++) {System.out.println(i + "====main");}}
}//1.自定义一个类型继承Thread类
class MyThread extends Thread {//2.重写Thread类中的run方法@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + "====MyThread");}}
}
(二)(二)实现多线程的第二种方式:实现方式
- 在JDK中有一个接口:Runnable
- 步骤:
(1)自定义一个类,实现Runnable接口
(2)在自定义类中重写Runnable接口的run方法
(3)创建自定义类型的对象,表示一个任务
(4)创建线程对象,将任务添加到线程中
(5)线程对象调用start方法,启动线程
代码示例
package com.csdn.day021;public class Demo02_ThreadSecondWay {public static void main(String[] args) {//3.创建自定义类型的对象,表示一个任务对象MyTask task = new MyTask();//4.创建一个线程对象,将任务添加到线程中Thread t = new Thread(task);//5.线程对象调用start方法,启动线程t.start();for (int i = 1; i <= 1000; i++) {System.out.println(i + "====main");}}
}//1.自定义一个类型,实现Runnable接口
class MyTask implements Runnable {//2.重写Runnable接口中的run方法@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + "====MyTask");}}
}
(三)(三)匿名内部类简化两种线程的实现方式
Thread t = new Thread() {@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + "====MyThread");}}};t.start();
//接口的实现类对象,表示一个任务/*Runnable r = new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + "====MyTask");}}};Thread t = new Thread(r);*/Thread t = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + "====MyTask");}}});t.start();
(四)两种方式的比较
- 代码的复杂程度:
(1)继承的方式比较简单
(2)实现的方式相对复杂 - 实现原理:
(1)继承方式:创建好线程对象后,调用start()方法启动线程,start()方法又调用了start0()方法,start0()方法调用了run()方法,因为在自定义类型(子类中)重写了Thread类的run方法,所以直接执行子类中重写后的run,我们重写时定义好的业务逻辑就执行了
(2)实现方式:创建接口的实现类对象,这个对象是一个任务对象。创建线程对象,将任务对象封装到线程对象中,将任务对象当做参数传递给线程对象,线程对象在创建的过程中,连续调用2个init方法,之后,将任务对象作为线程对象的成员变量,赋值给线程。创建好线程对象后,调用start()方法启动线程,start()方法又调用了start0()方法,start0()方法调用了run()方法,因为在初始化的时候,已经将任务对象封装进了线程对象中,所以此时是线程对象在调用线程类中run方法,此时run方法就要执行。判断任务对象不为null之后,任务对象调用接口中的run方法,因为接口的run方法已经被实现了,所以根据任务对象所属类型,调用任务对象所属类中重写过run方法,执行重写过后的方法。 - 设计:
(1)继承方式:自定义类型继承了Thread类型,就无法再去继承其他类型,代码扩展性较差
(2)实现方式:一个类,实现多个接口的同时还能再继承一个类型,扩展性比较强 - 灵活性:
(1)继承的方式:将业务逻辑和线程对象绑定在了一起,耦合度高,灵活性差
(2)实现的方式:将任务对象和线程对象分离开,降低耦合度,灵活性增强。一个任务对象可以被多个线程执行,一个线程也可以执行不同的任务对象。并且将来和可以将任务对象,提交到线程池中;任务对象被不同的线程执行,也方便多线程之间的数据交互。
三、Thread类中常用的方法
(一)获取线程的名称
- getName() 获取线程的名称
- 注意事项:
(1)如果没有给线程起名字,线程具有默认名称,格式:【Thread-X】,其中X从0开始,按照正整数升序排列
(2)继承的方式中,可以直接在run方法内调用getName(),是因为继承方式的run和getName都来源于父类Thread;在实现的方式中,run方法里不能直接调用getName方法,因为run方法时接口Runnable的方法,getName是Thread类中的方法,不在一个体系。
代码示例
package com.csdn.day021;public class Demo03_GetName {public static void main(String[] args) {Thread t = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(getName());}});t.start();}public static void test2() {Thread t = new Thread() {@Overridepublic void run() {System.out.println(getName());}};t.start();}public static void test1() {Thread t = new Thread();Thread t1 = new Thread();Thread t2 = new Thread();Thread t3 = new Thread();System.out.println(t.getName());System.out.println(t1.getName());System.out.println(t2.getName());System.out.println(t3.getName());}
}
(二)设置线程名称
- setName(String name) 设置线程名称
- 构造方法:
(1)Thread(String name)
(2)Thread(Runnable target, String name) - 可以在线程启动前设置线程名称,也可以在启动后设置
代码示例
package com.csdn.day021;public class Demo04_SetName {public static void main(String[] args) {Thread t = new Thread(new Runnable() {@Overridepublic void run() {}}, "线程9999");System.out.println(t.getName());}public static void test1() {Thread t = new Thread();System.out.println(t.getName());t.setName("线程1111");System.out.println(t.getName());Thread t1 = new Thread("线程2222");System.out.println(t1.getName());}
}
(三)获取当前线程对象
- 作用:某段代码只要是在执行,就一定会在某个线程里,此时如果调用获取线程对象的方法,该段代码,在哪条线程中执行,返回的就是哪个线程对象
- 方法:static Thread currentThread()
(1)返回当前正在执行的这段代码所在线程的线程对象
(2)那条线程执行这个方法,获取的就是哪条线程的对象
代码示例
package com.csdn.day021;public class Demo05_GetThreadInstance {public static void main(String[] args) {/*new Thread("线程1111") {@Overridepublic void run() {Thread.currentThread();}}.start();*/new Thread(new Runnable() {@Overridepublic void run() {//currentThread方法,在哪里执行,获取到的就是执行这段代码的那个线程对象//Thread t = Thread.currentThread();System.out.println(Thread.currentThread().getName());}}, "线程9999").start();}
}
(四)练习
1、获取主方法所在的线程名称
2、获取垃圾回收线程的名称
代码示例
package com.csdn.day021;/*** 1、获取主方法所在的线程名称
2、获取垃圾回收线程的名称* * @author Zihuatanejo**/
public class Demo06_Exercise {public static void main(String[] args) {//哪个线程执行了currentThread方法,就获取哪个线程对象System.out.println(Thread.currentThread().getName());new Garbage();System.gc();}
}class Garbage {@Overrideprotected void finalize() throws Throwable {System.out.println(Thread.currentThread().getName());}
}
(五)线程休眠
- static sleep(long millis) 让当前线程休眠指定的毫秒数
- 作用:当某个线程执行到该方法时,就让执行该方法的线程休眠指定的毫秒数
- 注意事项:
(1)当在重写的方法中使用该方法时,如果重写前的方法没有声明异常,重写后的方法只能try…catch捕获
(2)该方法会出现InterruptedException,中断异常,当线程在休眠过程中被打断,会报此异常
代码示例
package com.csdn.day021;public class Demo07_Sleep {public static void main(String[] args) throws InterruptedException {/*for (int i = 5; i >= 0; i--) {System.out.println(i);Thread.sleep(1000);}*/TestThread tt = new TestThread();tt.start();}
}class TestThread extends Thread {@Overridepublic void run() {for (int i = 5; i >= 0; i--) {System.out.println(i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}
(六)守护线程
- 守护线程:保证其他非守护线程能够正常执行的线程,为其他非守护线程提供良好的运行环境。守护线程死亡,非守护线程可以正常执行,非守护线程死亡,守护线程也就没有存在的意义了,片刻(或长或短的时间)之后,守护线程也会消亡。
- isDaemon() 判断一个线程是否为守护线程
- setDaemon(boolean bo) 将一个线程设置为守护线程
- 任何线程在创建出来的时候,都是一个非守护线程
- 别名:后台线程
代码示例
package com.csdn.day021;public class Demo08_ProtectedThread {public static void main(String[] args) {//任何一条线程创建出来都是非守护线程//非守护线程执行,守护线程是用于守护非守护线程的//非守护线程挂了,守护线程片刻后也会挂,但是啥时候挂或快或慢Thread t1 = new Thread("非守护线程") {@Overridepublic void run() {for (int i = 1; i <= 2000; i++) {System.out.println(i + "===" + getName());}}};Thread t2 = new Thread("守护线程") {int num = 1;@Overridepublic void run() {for (;;) {System.out.println(num + "===" + getName());num++;}}};t2.setDaemon(true);t1.start();t2.start();}public static void test1() {Thread t = new Thread();System.out.println(t.isDaemon());t.setDaemon(true);System.out.println(t.isDaemon());}
}
(七)练习
分别从作用上和代码上判断,垃圾回收线程是否为守护线程
代码示例
package com.csdn.day021;//分别从作用上和代码上判断,垃圾回收线程是否为守护线程
public class Demo09_Exericse {public static void main(String[] args) {while(true) {new Rubbish();}}
}class Rubbish {@Overrideprotected void finalize() throws Throwable {System.out.println(Thread.currentThread().isDaemon());}}
(八)线程的优先级
- 执行多线程的时候,每个线程都有优先级,优先级高的,在执行的整个周期内比较靠前执行,优先级低的,在执行的整个周期内比较靠后的执行
- 有三个线程优先级常量:
(1)MAX_PRIORITY 最高优先级:10
(2)MIN_PRIORITY 最低优先级:1
(3)NORM_PRIORITY 默认优先级:5 - setPriority(int newPriority) 设定线程优先级
package com.csdn.day021;public class Demo10_Prtority {public static void main(String[] args) {Thread t = new Thread("====1111") {@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + getName());}}};Thread t1 = new Thread("====9999") {@Overridepublic void run() {for (int i = 1; i <= 1000; i++) {System.out.println(i + getName());}}};t.setPriority(1);t1.setPriority(10);t.start();t1.start();}
}
四、多线程中的安全问题
(一)问题描述
- 原因:某段代码在操作一个数据的时候,还没操作完毕,CPU就切换到其他线程上,就会导致数据的不完整或者错误
- 希望:要么不操作,要操作就操作完
代码示例
package com.csdn.day021;public class Demo11_Question {public static void main(String[] args) {Runnable task = new Runnable() {/** 119905130775* * *///一个账户,有0元int money = 0;//t1:1001public void run() {for (int i = 1; i <= 100000; i++) {money = money + 1;}System.out.println(money);}};//创建两条线程,共享一个任务,向一个账户里分别存钱Thread t1 = new Thread(task);Thread t2 = new Thread(task);t1.start();t2.start();}
}
(二)同步代码块
- 同步代码块:使用一种格式,让某段代码执行的时候,CPU不会切换到影响这段代码执行的代码上去。这种格式能够保证CPU在执行A主线程的时候,不会切换到影响A线程执行的其他线程上
- 格式:
synchronized(同步锁对象) {
需要保证执行完整性的代码
} - 使用同步代码块之后的效果:
(1)当CPU想要去执行同步代码块的时候,需要先获取到同步锁对象,获取之后就能执行同步代码块里面的内容;当CPU想要执行其他线程的时候,但是不会切换到具有相同通过不锁对象的代码上
(2)当CPU执行完了当前代码块中的代码,回释放同步锁对象,CPU就可以运行到其他的线程上,执行其他代码。
代码示例
package com.csdn.day021;public class Demo12_SynchronizedBlock {public static void main(String[] args) {PrintStr p = new PrintStr();new Thread() {@Overridepublic void run() {while(true) {p.test1();}}}.start();new Thread() {@Overridepublic void run() {while(true) {p.test2();}}}.start();}
}class PrintStr {//要么不执行,要么执行完/*如果是相互干扰的数据,需要保证一个执行的时候,另一个绝对不执行,不来干扰,一个执行就要彻底执行完再执行另一个,或者再重新争夺CPU执行权*///同步锁对象的原则:互相干扰的同步代码块需要使用同一个同步锁对象,对象可以是任意类型的对象Object obj = new Object();public void test1() {synchronized(obj) {System.out.print("中");System.out.print("公");System.out.print("教");System.out.println("育");}}public void test2() {synchronized (obj) {System.out.print("优");System.out.print("就");System.out.println("业");}}
}
总结:多线程在程序开发中起着举足轻重的作用,一定要好好理解,并在后续开发中深刻体会!
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- java数组排序Arrays.sort()
1、从小到大 Arrays.sort(a, cmp); 2、从大到小 需要对比较方法进行重写 Comparator cmp new MyComparator(); Arrays.sort(a, cmp); //Comparator是一个接口,所以这里我们自己定义的类MyComparator要implents该接口 //而不是extends Comparator class MyCompara…...
2024/4/28 6:20:36 - saltstack pillar设置iptables
/etc/salt/master 注意配置文件每行前边是有空格的 file_roots:base:- /srv/salt/basedev:- /srv/salt/devprod:- /srv/salt/prodpillar_roots:base:- /srv/salt/pillar/srv/salt/pillar/top.sls base:*:- iptables.whitelist- iptables.nginx- iptables.ntp/srv/salt/pillar/…...
2024/4/28 10:47:08 - 手机端开发(uni-app、vant、mui)优缺点分析
疫情期间,使用过uni-app,最近又接触了vant,但是由于项目部署原因(项目不支持前后端分离,仅支持静态页Htmlcss项目),所以最后用mui开发一套。今天就介绍一下,我用过这三个框架的看法以…...
2024/4/27 1:52:59 - 《机器学习》读书笔记——第三章 线性模型
本章内容是在阅读《机器学习》的过程中记录的学习笔记,这本书是机器学习领域的经典书籍,作者是周志华老师。 更新中 目录1 基本形式2 线性回归3 对数几率回归4 线性判别分析5 多分类学习6 类别不平衡问题1 基本形式 f(x)wTxbf(\boldsymbol{x}) \boldsym…...
2024/4/14 21:55:25 - 面向机密计算的Enclave容器技术栈
内容提要: ✔云原生场景下的数据安全威胁和风险 ✔机密计算是如何为数据在计算阶段提供安全防护的 ✔Inclavare Containers如何提升容器的数据安全性 这是内容大纲,介绍了数据安全和机密计算的背景知识,也对Inclavare Containers开源项目、架…...
2024/4/25 3:48:51 - 【转】跨站脚本漏洞(XSS)基础讲解
转发前言: 关于XSS原文作者介绍较为好理解原理和重要性;推荐另一篇关于XSS的介绍,会有更深的印象理解《前端安全系列(一):如何防止XSS攻击?》XSS漏洞 一、文章简介 XSS漏洞是Web应用程序中最…...
2024/4/27 17:13:56 - BMD UltraStudio 4K Extreme 3采集卡
BMD UltraStudio 4K Extreme 3采集卡 描述 业界新锐UltraStudio 4K Extreme 3是一款适用于PCI Express和Thunderbolt计算机的先进采集和输出方案!它采用40Gb/s炫速Thunderbolt 3技术,并搭载先进的12G SDI和HDMI 2.0接口,能从事高达每秒60帧…...
2024/4/26 11:58:38 - 花一周时间整理了3.5W字的全栈自动化测试面试题(答案+学习路线)!为了找到好工作,拼了!
目录前言:一、Web自动化测试面试题二、APPUI自动化测试面试题三、接口自动化测试面试题四、全栈自动化测试学习路线图及全栈资料分享前言: 这篇文章是为大家在网上收集整理的软件测试面试题目及答案。无意冒犯各位原创作者,如果在您的博客或者…...
2024/4/26 11:09:20 - 支付宝怎么预约新冠疫苗? 疫苗网上预约查询的方法
我们都知道提前接种疫苗有益身体健康,但是许多人不清楚疫苗怎么预约,疫苗网上怎么查询,接下来我将介绍一下支付宝疫苗怎么预约,疫苗网上查询的方法,详细请看下文介绍。 1、进入支付宝点击市民中心选项。 2、点击办事大…...
2024/4/27 0:49:04 - 开关电源中如何检测变频器的好坏?
开关电源中,如果变压器损坏如何操作?以下是常见的变压器损坏检测方法,希望对你有用。 开关电源中如何检测变频器的好坏?1、观察变压器的外观并检查是否有明显的异常。线圈引线没有折断,焊料未去除,绝缘层被…...
2024/4/15 4:25:33 - Unity报错:UnityEditor.AsyncHTTPClient:Done(State, Int32)
Unity报错:UnityEditor.AsyncHTTPClient:Done(State, Int32) 解决方法: 取消勾选以上项目即可...
2024/3/28 22:16:20 - 算法必看书籍推荐
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法…...
2024/3/28 10:14:39 - Jenkins安装文档
1Linux安装Jenkins Linux直接安装Jenkins,将最新版jenkins加入到yum源的的方式安装Jenkins 1.如果Linux中JDK版本低于1.8需要安装jdk1.8以上的版本 2.yum的repo中默认没有Jenkins,需要先将Jenkins存储库添加到yum repos,执行命令࿱…...
2024/4/26 15:34:39 - 工业变频电源是什么?与军工电源的区别
工业变频电源通常是指适用于工业能源环境的变频电源产品,也可等同于工频变频电源。工业电源可以理解为三相380V电源,高压电缆用于进入家庭,为大型制造和加工行业的公司提供电源。电源频率通常是指工业上使用的交流电源的频率。我国的电源频率…...
2024/4/18 0:46:54 - css Learning6
css3部分新增属性css3 背景backgroundbackground-colorbackground-imagebackground-repeatbackground-attachmentbackground-positionbackground-originbackground-clipbackground-sizecss3 边框box-shadowborder-imagecss3 圆角border-radius属性border-radius取值选择单个角设…...
2024/4/17 6:50:11 - [区块链]不能篡改的区块链
关于块链,比起很多人听说块链技术是可以称霸时代的技术,也有人说会彻底改变我们现有的生活方式,块链相当于当时的工业革命,是人类文明史上的变革。基于这种广泛的支持,块链技术以不可思议的速度遍布世界,被…...
2024/4/22 1:44:03 - webrtc-信令部分(SDP)
信令的一个主要功能是交换消息体,消息体可以是XML、X-Q931、SDP等,是一条消息的净荷部分,webrtc使用SDP描述媒体信息,默认使用Unified Plan。 Unified Plan,一个m行用一个ContentInfo存,会建立一个transce…...
2024/3/29 10:06:25 - ICC II官方教程笔记2 placement
整个笔记比较长 建议搜索食用 placement的关键步骤 #mermaid-svg-RqxxG9BMdciOY8Dx .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-RqxxG9BMdciOY8Dx .label text{fill:#333}#mermaid-svg-RqxxG…...
2024/4/27 20:23:45 - 第1章开始启程——你的第一行Android代码
第1章开始启程——你的第一行Android代码1.1.1Android系统架构1.1.2Android发布版本1.1.3Android应用开发特色1.3.1创建你的第一个Android项目1.3.2启动模拟器1.3.3运行HelloWorld1.3.4分析你的第一个Android 程序app详解1.4.1使用Android的日志工具Log1.4.2过滤器**小提示**第…...
2024/4/14 16:28:09 - app消息推送的完成实现教程
实现的主要思想 app实现消息推送,利用的是第三方的个推平台,后端将需要推送的内容通过第三方个推服务器传递给手机端。 具体前端打包配置 根据上图可知,采用的打包软件是Hbuilder X,在模块配置的时候,勾选push模块中的uniPush。…...
2024/4/15 0:37:33
最新文章
- Redis(五) Redis锁
结合前四期 Redis(一) Redis简介(Redis(一) Redis简介-CSDN博客) Redis(二) 可编程性(Redis(二) 可编程性-CSDN博客) Redis(三) 事务与发布订阅(Redis(三) 事务与发布订阅-CSDN博客) Redis(四) 主从、哨兵、集群环境搭建(Redis(四) 主从、哨兵、集群环境搭建-CSDN博客) (本文代…...
2024/4/28 14:32:37 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 如何注册midjourney账号
注册Midjourney账号比较简单,准备好上网工具,进入官网 Midjourney访问地址: https://www.midjourney.com/ 目前没有免费使用额度了,会员最低 10 美元/月,一般建议使用30美元/月的订阅方案。了解如何订阅可以查看订阅…...
2024/4/28 13:37:20 - [C++][算法基础]模拟队列(数组)
实现一个队列,队列初始为空,支持四种操作: push x – 向队尾插入一个数 x;pop – 从队头弹出一个数;empty – 判断队列是否为空;query – 查询队头元素。 现在要对队列进行 M 个操作,其中的每…...
2024/4/22 21:35:57 - 安装Docker(CentOS)
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…...
2024/4/22 19:32:03 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/4/28 4:04:40 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/4/28 12:01:04 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/4/27 12:24:35 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/4/27 12:24:46 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/4/28 12:01:03 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/4/28 12:01:03 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/4/28 12:01:03 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/4/27 12:44:49 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/4/27 21:08:20 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/4/28 9:00:42 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/4/27 18:40:35 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/4/28 4:14:21 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/4/27 13:52:15 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/4/27 13:38:13 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/4/28 12:00:58 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/4/28 12:00:58 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/4/27 22:51:49 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/4/28 7:31:46 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/4/28 8:32:05 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/4/27 20:28:35 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57