妄想成为Java程序员Day13:多线程
5多线程
5.1线程和进程
进程:
是一个内存中运行的应用程序,每个进程有一个独立的空间。
线程:
是进程中的一个执行路径,共享一个内存空间,线程之间可以切换,并发执行。一个进程最少一个线程
多线程:在一个程序的进程中开辟多个执行路径。
5.2 线程调度
分时调度:
所有的线程轮流使用CPU的使用权,平均分配给每个线程占用CPU的时间。
抢占式调度:
优先级高的线程使用CPU,如果线程优先级别相同,那么会随机选择一个(线程随机性),Java使用的是抢占式调度。
抢占式调度
CPU使用抢占式调度模式在多个线程间进行高速切换,对于CPU的一个核心而已,某个时刻,只能执行一个线程,而CPU的在多个线程间切换速度相对我们感觉要快,看上去有就是在同一时刻。其实,多线程程序并不能提高程序的运行效率,让CPU的使用率更高。
数据库面试题:如果有一千个用户访问你的数据库,是一起分时调度做速度快,还是排队执行速度快。
实际上是排队执行的速度快,因为省去了切换的时间。
5.2同步与异步
同步:排队执行,效率低但是安全。(效率低,但是资源不会发生抢占。)
异步:同时执行,效率高但是数据不安全。(资源抢占,容易发生死锁。)
5.3并发与并行
并发:指两个或者多个事件在同一个时间段内发生。
并行:指两个或者多个事件在同一时刻发生。
多线程的实现方式
有两种方法可以创建新的执行线程。 一种是将类声明为Thread的子类。 此子类应覆盖类Thread的run方法。 然后可以分配和启动子类的实例。 例如,计算大于规定值的素数的线程可以写成如下:
class PrimeThread extends Thread {long minPrime;PrimeThread(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}
然后,以下代码将创建一个线程并开始运行:
PrimeThread p = new PrimeThread(143);p.start();
创建线程的另一种方法是声明一个实现Runnable接口的类。 该类然后实现run方法。 然后可以分配类的实例,在创建Thread时作为参数传递,然后启动。 此其他样式中的相同示例如下所示:
class PrimeRun implements Runnable {long minPrime;PrimeRun(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}
然后,以下代码将创建一个线程并开始运行:
PrimeRun p = new PrimeRun(143);new Thread(p).start();
每个线程都有一个用于识别目的的名称。 多个线程可能具有相同的名称。 如果在创建线程时未指定名称,则会为其生成新名称。
继承Thread
package com.kaikeba.Day13;
public class duckThreadmain {
/*
*
* 多线程测试
*
* */
public static void main(String[] args) {duckThread01 d = new duckThread01();d.start();for (int i = 0; i <10 ; i++) {System.out.println("锄禾日当午"+i);}
}
}
package com.kaikeba.Day13;
public class duckThread01 extends Thread{
/*
* run方法就是线程要执行的任务方法
* */
@Override
public void run(){//在这里的代码 ,就是一条新的执行路径。//这个执行路径的触发方式,不是调用run方法 , 而是通过thread对象的start()来启动任务for (int i = 0; i <10 ; i++) {System.out.println("锄禾日当午"+i);}
}
}
每个线程都有一个自己的栈空间,共用一个堆内存。
由一个线程调用的方法,也会在这个线程里面执行。
public class duckRunablemain {
/*
*
* 多线程实现方法2
*
* Runable 与 继承Thread相比有如下优势:
* 1.通过创建任务,然后给线程分配的方式来实现的多线程,更适合多个线程同时执行相同任务的情况。
* 2.可以避免蛋单继承所带来的局限性
* 3.任务与程序分离,提高了程序的健壮性。
* 4.后续学习的线程池技术,接受Runable类型的任务,不接受Thread类型的线程;
*
* */
public static void main(String[] args) {//实现Runable//1 .创建一个任务对象duckRunable02 d = new duckRunable02();//2 .创建一个线程,并为其分配一个任务Thread t = new Thread(d);//执行这个线程t.start();
}
}
public class duckRunable02 implements Runnable {
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
System.out.println(“窗前明月光”+i);
}
}
}
Runable 与 继承Thread相比有如下优势:
* 1.通过创建任务,然后给线程分配的方式来实现的多线程,更适合多个线程同时执行相同任务的情况。
* 2.可以避免蛋单继承所带来的局限性
* 3.任务与程序分离,提高了程序的健壮性。
* 4.后续学习的线程池技术,接受Runable类型的任务,不接受Thread类型的线程;
但是 继承Thread可以使用匿名内部类直接添加线程
new Thread() {
@Override
public void run(){
for (int i = 0; i <10 ; i++) {
System.out.println(“哈哈哈哈”+i);
}
}
}.start();
如何获取或设置线程名称
Thread.currentThread().getName()
线程中断
package com.kaikeba.Day13;
public class duckNotrun {
//线程的中断
//线程是一个独立的执行路径,他是否应该结束,应该是有自身决定。
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable());t1.start();for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName()+":"+i);try {Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}}//给线程t1添加中断标记,触发异常t1.interrupt();
}static class MyRunnable implements Runnable{@Overridepublic void run() {for (int i = 0; i <10 ; i++) {System.out.println(Thread.currentThread().getName()+":"+i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();//e.printStackTrace();
// System.out.println(“发现中断标记,但是不死亡。”);
System.out.println(“发现中断标记,线程死亡。”);
return;//杀死线程
}
}
}
}
}
守护线程
线程分为守护线程和用户线程
用户线程:当一个进程不包括任何的存活的用户线程时,死亡。
守护线程:守护用户线程,当最后一个用户线程结束时,所有的守护线程自动死亡
线程安全和不安全
public class duckSafe05 {
public static void main(String[] args) {
//线程不安全Runnable run = new Ticket();new Thread(run).start();new Thread(run).start();new Thread(run).start();
}static class Ticket implements Runnable{private int count =10;@Overridepublic void run() {while (count > 0){//卖票System.out.println("正在准备卖票");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}count --;System.out.println("出票成功,余票:" + count);}}
}
}
显式锁和隐式锁
1.从sync和lock的出身(原始的构成)来看看两者的不同。
Sync:Java中的关键字,是由JVM来维护的。是JVM层面的锁。
Lock:是JDK5以后才出现的具体的类。使用lock是调用对应的API。是API层面的锁
2.Sync是隐式锁。Lock是显示锁
所谓的显示和隐式就是在使用的时候,使用者要不要手动写代码去获取锁和释放锁的操作。
我们大家都知道,在使用sync关键字的时候,我们使用者根本不用写其他的代码,然后程序就能够获取锁和释放锁了。那是因为当sync代码块执行完成之后,系统会自动的让程序释放占用的锁。Sync是由系统维护的,如果非逻辑问题的话话,是不会出现死锁的。
在使用lock的时候,我们使用者需要手动的获取和释放锁。如果没有释放锁,就有可能导致出现死锁的现象。手动获取锁方法:lock.lock()。释放锁:unlock方法。需要配合tyr/finaly语句块来完成。
隐式锁
public class duckSafe05 {
public static void main(String[] args) {
/*
* 线程同步:synchronized
* */
//线程不安全//解决方案1.同步代码块//格式 : synchronized(锁对象){//// }//排队,有锁对象的排队。(同一个锁对象)Runnable run = new Ticket();new Thread(run).start();new Thread(run).start();new Thread(run).start();
}static class Ticket implements Runnable {private int count = 10;private Object o = new Object();@Overridepublic void run() {while (true) {synchronized (o) { if (count > 0) {//卖票System.out.println("正在准备卖票");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}count--;System.out.println(Thread.currentThread().getName()+"出票成功,余票:" + count);}}}}
}
}
隐式锁2
public class duckSafe06 {
public static void main(String[] args) {
/*
* 线程同步:synchronized
* */
//线程不安全//解决方案2.同步方法//格式 : public synchronized boolean (){//// }//排队,有锁对象的排队。(同一个锁对象)Runnable run = new Ticket();new Thread(run).start();new Thread(run).start();new Thread(run).start();}static class Ticket implements Runnable {private int count = 10;@Overridepublic void run() {while (true) {boolean flag = sale();if (!flag){break;}}}public synchronized boolean sale(){if (count > 0) {//卖票System.out.println("正在准备卖票");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}count--;System.out.println(Thread.currentThread().getName() + "出票成功,余票:" + count);return true;}elsereturn false;}
}
显示锁
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class duckSafe07 {
/*
* 同步代码块和同步方法都是隐式锁
* 线程同步:Lock
* Lock l = new ReentrantLock();
* l.lock
*
* /
public static void main(String[] args) {
/
* 线程同步:synchronized
* */
//线程不安全//解决方案1.同步代码块//格式 : synchronized(锁对象){//// }//排队,有锁对象的排队。(同一个锁对象)Runnable run = new Ticket();new Thread(run).start();new Thread(run).start();new Thread(run).start();return;
}static class Ticket implements Runnable {private int count = 10;Lock l = new ReentrantLock();@Overridepublic void run() {while (true) {l.lock();if (count > 0) {//卖票System.out.println("正在准备卖票");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();System.out.println("出现异常");}count--;System.out.println(Thread.currentThread().getName() + "出票成功,余票:" + count);}else {break;}l.unlock();}}}
公平锁和不公平锁
公平锁:先到先执行
//Lock l = new ReentrantLock(true);true为公平 (默认)false为不公平
不公平锁:谁抢到谁执行
线程阻塞
//线程阻塞 :所有比较消耗时间的操作
耗时操作
5.4Thread
嵌套类汇总
嵌套类
变量和类型 类 描述
static class Thread.State 线程状态。
static interface Thread.UncaughtExceptionHandler 当 Thread由于未捕获的异常而突然终止时调用的处理程序接口。
字段汇总
字段
变量和类型 字段 描述
static int MAX_PRIORITY 线程可以拥有的最大优先级。
static int MIN_PRIORITY 线程可以拥有的最低优先级。
static int NORM_PRIORITY 分配给线程的默认优先级。
控制字段优先级
构造方法摘要
构造方法
构造器 描述
Thread() 分配新的 Thread对象。
Thread(Runnable target) 分配新的 Thread对象。
Thread(Runnable target, String name) 分配新的 Thread对象。
Thread(String name) 分配新的 Thread对象。
Thread(ThreadGroup group, Runnable target) 分配新的 Thread对象。
Thread(ThreadGroup group, Runnable target, String name) 分配新的 Thread对象,使其具有 target作为其运行对象,具有指定的 name作为其名称,并且属于 group引用的线程组。
Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配新的 Thread对象,使其具有 target作为其运行对象,具有指定的 name作为其名称,并且属于 group引用的线程组,并具有指定的 堆栈大小 。
Thread(ThreadGroup group, Runnable target, String name, long stackSize, boolean inheritThreadLocals) 分配新的Thread对象,使其具有target作为其运行对象,具有指定的name作为其名称,属于group引用的线程组,具有指定的stackSize ,并且如果inheritThreadLocals是true ,则继承inheritable thread-local变量的初始值。
Thread(ThreadGroup group, String name) 分配新的 Thread对象。
方法摘要
所有方法 静态方法 实例方法 具体的方法 弃用的方法
变量和类型 方法 描述
static int activeCount() 返回当前线程thread group及其子组中活动线程数的估计值。
void checkAccess() 确定当前运行的线程是否具有修改此线程的权限。
protected Object clone() 抛出CloneNotSupportedException,因为无法有意义地克隆线程。
int countStackFrames() 不推荐使用,要删除:此API元素将在以后的版本中删除。
此调用的定义取决于suspend() ,已弃用。
static Thread currentThread() 返回对当前正在执行的线程对象的引用。
static void dumpStack() 将当前线程的堆栈跟踪打印到标准错误流。
static int enumerate(Thread[] tarray) 将当前线程的线程组及其子组中的每个活动线程复制到指定的数组中。
static Map<Thread,StackTraceElement[]> getAllStackTraces() 返回所有活动线程的堆栈跟踪映射。
ClassLoader getContextClassLoader() 返回此线程的上下文 ClassLoader 。
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() 返回由于未捕获的异常而导致线程突然终止时调用的默认处理程序。
long getId() 返回此Thread的标识符。
String getName() 返回此线程的名称。
int getPriority() 返回此线程的优先级。
StackTraceElement[] getStackTrace() 返回表示此线程的堆栈转储的堆栈跟踪元素数组。
Thread.State getState() 返回此线程的状态。
ThreadGroup getThreadGroup() 返回此线程所属的线程组。
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() 返回此线程由于未捕获的异常而突然终止时调用的处理程序。
static boolean holdsLock(Object obj) 当且仅当当前线程在指定对象上保存监视器锁时,返回 true 。
void interrupt() 中断此线程。
static boolean interrupted() 测试当前线程是否已被中断。
boolean isAlive() 测试此线程是否存活。
boolean isDaemon() 测试此线程是否为守护程序线程。
boolean isInterrupted() 测试此线程是否已被中断。
void join() 等待这个线程死亡。
void join(long millis) 此线程最多等待 millis毫秒。
void join(long millis, int nanos) 此线程最多等待 millis毫秒加上 nanos纳秒。
static void onSpinWait() 表示调用者暂时无法进展,直到其他活动发生一个或多个操作为止。
void resume() 已过时。
此方法仅适用于suspend() ,由于它易于死锁,因此已被弃用。
void run() 如果此线程是使用单独的Runnable运行对象构造的,则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。
void setContextClassLoader(ClassLoader cl) 为此Thread设置上下文ClassLoader。
void setDaemon(boolean on)
daemon守护线程
守护用户线程
当所有用户线程死亡
守护线程死亡 将此线程标记为 daemon线程或用户线程。
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 设置当线程由于未捕获的异常而突然终止时调用的默认处理程序,并且没有为该线程定义其他处理程序。
void setName(String name) 将此线程的名称更改为等于参数 name 。
void setPriority(int newPriority) 更改此线程的优先级。
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 设置当此线程由于未捕获的异常而突然终止时调用的处理程序。
static void sleep(long millis)
//暂时停止执行
millis 毫秒数 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。
static void sleep(long millis, int nanos) 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数加上指定的纳秒数,具体取决于系统定时器和调度程序的精度和准确性。
void start() 导致此线程开始执行; Java虚拟机调用此线程的run方法。
void stop() 已过时。
这种方法本质上是不安全的。
void suspend() 已过时。
此方法已被弃用,因为它本身就容易出现死锁。
String toString() 返回此线程的字符串表示形式,包括线程的名称,优先级和线程组。
static void yield()
5.3线程的六种状态
new:创建
Runnable:运行
blocked:等待
Waiting:睡眠
TimeWaiting:计时等待
Trminated:死亡
5.4Callable
等主线程完成再完成返回一个值
也可以和主线程一起执行;
5.5线程池
开发过程中会不可避免得创建大量的线程
5.6缓存线程池
1.判断线程池中是否存在空闲线程
2.存在则使用
3.不存在,则创建线程并且放入线程池,然后使用。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- prophet时序预测,初次见面
prophet的安装是个艰难的过程,希望大家加油。 1.第一步导入工具包2.选择一个表格数据,进行预测显示前5行,然后因为Prophet 的输入量往往是一个包含两列的数据框:ds 和 y ,所以如果表格设计好了的话最好,没有的话,就将列名设置为ds y 代码:df.columns=[‘ds’,‘y’] ds…...
2024/5/3 9:27:34 - 文本处理与脚本的简单编写练习
1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来[root@centos7 scripts]# grep -v /sbin/nologin$ /etc/passwd |cut -d: -f1 root sync shutdown halt kyle test[root@centos7 ~]# awk -F: {if($NF!="/sbin/nologin"){print…...
2024/4/10 12:44:49 - 李开复谈2020年AI科学家创业。道翰天琼认知智能api机器人接口。
2012年至今,在深度学习推动下,这一波人工智能的蓬勃发展已进入第十个年头。在初期,一系列由AI科学家创建的初创公司,经过大浪淘沙,如今已有多家脱颖而出成为独角兽企业;榜样在先,于是有不少 AI 领域的学者,也寄望于自己在该领域深厚的研究功底,想乘风破浪,闯出一番事…...
2024/4/12 11:10:45 - django 多对多 对中间表的数据操作
一. 模型类的设计这里通过: users = models.ManyToManyField(User,symmetrical=False,related_name = labels, verbose_nane = 关注者) 来指定两个模型类之间的多对多关系,related_name = labels表示user对象可以通过labels属性访问到中间表的label数据。如此在迁移建表之后便…...
2024/5/8 12:04:29 - 无锁加载配置
动态加载配置,是服务中常用的功能。 动态加载配置是指不重启服务情况下,使配置文件的改动或者其他方式的改动生效。 一般普遍使用的方式是,加锁方式。 其步骤大体过程如下:从配置文件中读取配置到新的配置变量 加锁 将新的配置变量赋值给已有的配置变量 解锁 使用新的配置接…...
2024/5/2 12:19:47 - 英读廊——如果运动引起摩擦,摩擦生热,为什么风吹得越快却越冷
* 用英语自身来理解和学习英语是最好的方式,《英读廊》是《满庭说英语》中的拓展阅读系列,这一系列的文章力求帮助大家在英语阅读能力上有所提升,并树立英语思维; * 推荐的阅读的方法是:先原文,适当看解析阅读,还有疑惑再看双语对照。 * 解析中英语单词的音标使用Dictco…...
2024/4/10 12:33:03 - 道翰天琼认知智能未来机器人接口API简介介绍聊天机器人服务机器人机器人接口
认知维度技术体系是认知智能三大技术体系(认知维度,类脑模型,万维图普)之一 。认知维度技术体系以中西方哲学思想体系,认知语言学,形式语言学,三体论等思想体系为基础,以划分人类认知范围和边界为目的,以认知维度的识别和应用为导向而形成的全新一代认知智能奠基技术体…...
2024/5/5 18:42:31 - SpringAOP使用:为一些方法添加日志,实现方法动态切入
目标方法 先创建一个类,用来实现简单的加减乘除操作。利用接口和实现层实现。 接口层 package com.xzy.intr;public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}实现层 import com.xzy.intr.Calculato…...
2024/4/10 12:44:47 - 道翰天琼认知智能未来机器人接口API简介介绍聊天机器人服务机器人机器人接口大脑平台。
人工智能和认知智能都是计算机科学的分支学科之一。人工智能是智能时代的第二个阶段,认知智能是智能时代的第三个阶段。认知智能也并不是智能时代发展的最终阶段,最终阶段应该是通用智能强智能时代。 本文主要就人工智能和认知智能的理论体系,技术体系,智能程度等三大方面进…...
2024/4/10 12:44:46 - 收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~
Java 基础 equals与==的区别final, finally, finalize 的区别重载和重写的区别两个对象的hashCode()相同,则 equals()是否也一定为 true?抽象类和接口有什么区别BIO、NIO、AIO 有什么区别?String,Stringbuffer,StringBuilder的区别JAVA中的几种基本数据类型是什么,各自占…...
2024/5/3 6:28:32 - k8s集群安装部署(高成功率)
一、前言 之前在看了一些容器和Kubernetes相关的技术书籍,但是“纸上得来终觉浅”,所以我打算实际部署一下k8s集群。这篇文章可能比较长,希望有需要的朋友能耐心看完,我的其他几篇博客对部署安装k8s集群中所遇到的问题都做了详细说明,大家可作为参考。按照我得这篇博客进行…...
2024/4/21 20:48:41 - 道翰天琼认知智能未来机器人接口API简介介绍聊天机器人服务机器人机器人大脑
认知维度技术体系是认知智能三大技术体系(认知维度,类脑模型,万维图普)之一 。认知维度技术体系以中西方哲学思想体系,认知语言学,形式语言学,三体论等思想体系为基础,以划分人类认知范围和边界为目的,以认知维度的识别和应用为导向而形成的全新一代认知智能奠基技术体…...
2024/4/10 12:44:43 - numpy学习
Python提供了一个input() ,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字: name=input() 当你输入name = input() 并按下回车后,Python交互式命令行就在等待你的输入了。 这时,你可以输入任意字符,然后按回车后完成输入。 输入完成后,不会有任何提示,P…...
2024/5/3 2:41:14 - 道翰天琼认知智能未来机器人接口API简介介绍服务机器人机器人大脑机器人接口。
人工智能和认知智能都是计算机科学的分支学科之一。人工智能是智能时代的第二个阶段,认知智能是智能时代的第三个阶段。认知智能也并不是智能时代发展的最终阶段,最终阶段应该是通用智能强智能时代。 本文主要就人工智能和认知智能的理论体系,技术体系,智能程度等三大方面进…...
2024/4/10 12:44:41 - 基于IO流,集合和TCP/IP的简单应用
题目: 要求实现一个文件服务器: 服务端可以将服务端某个目录(该目录下只有标准文件)对外共享,客户端连接服务器之后,首先需要在客户端显示一个可以下载的文件列表;然后客户端发送需要下载的文件编号,将服务端中指定编号的文件下载到本地 一个工具类 功能:根据提供的输入…...
2024/4/10 12:44:40 - 消防工程师 第二篇 建筑防火 3.耐火等级
P22耐火等级第二节 建筑材料的燃烧性能及分级一、燃烧性能A不燃(戊)B1难燃(丁)B2可燃(丙)B3易燃——没有构件第三节 建筑构件的燃烧性能和耐火等级建筑构件:墙、柱、梁、楼板、门、窗二、建筑构件的耐火极限(一)耐火极限的概念耐火试验时,1.承载能力:抵抗垮塌2.完整…...
2024/5/2 9:05:12 - python学习之路(2)python的开发环境
目录python的开发环境1.什么是开发环境2.常用的开发环境有哪些?3.IDLE实操 python的开发环境 1.什么是开发环境 开发环境,英文是IDE ( Integrated Development Environment集成开发环境)。不要纠结于使用哪个开发环境。开发环境本质上就是对Python解释器python.exe的封装,核心…...
2024/4/10 12:44:38 - 聊天机器人机器人大脑,机器人接口分享。认知智能未来机器人接口API简介介绍
今天谈谈聊天机器人,关于聊天机器人,大家肯定不陌生的。但是聊天机器人的效果的确不太让人满意。因为现在的聊天机器人的确比较智障。其智障的原因核心就是目前的技术体系的问题。技术体系不成熟,所以才让人感觉到比较智障。先看看聊天机器人的发展历史:第一个时期(1966年…...
2024/4/28 6:20:32 - Java经典面试题答案解析(1-80题)
前言 前几天,在茫茫的互联网海洋中寻寻觅觅,把收藏的800道Java经典面试题都发出来,有小伙伴私聊我要答案。所以感觉没有答案的面试题是没有灵魂的,于是今天先整理基础篇的前80道答案出来哈~所有的Java面试题已经上传github,答案也上传了一部分~https://github.com/whx123/…...
2024/5/2 12:31:51 - 基于ROS与optitrack的四旋翼飞机开发流程
本文将一些注意点记录下来,适合于开发调试:目前只是分段调试通了,带后续联合开发的时候在来补充还有没有什么注意点(过程也算麻烦,也算不麻烦); ROS组网,optitrack 台式机(windows系统)与 ROS服务器(这里称为服务器,感觉比较合适),四旋翼在同一个局域网内。其…...
2024/4/24 23:58:01
最新文章
- LeetCode热题100|动态规划Part.1|70.爬楼梯、118.杨辉三角、198.打家劫舍
70.爬楼梯 代码随想录原题,看这篇文章:C动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯 118.杨辉三角 题目链接:118.杨辉三角 一刷代码 时间复杂度和空间复杂度都造到 O ( n u m R o w s 2 ) O(num…...
2024/5/8 15:27:00 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - C# 构建可定时关闭的异步提示弹窗
C# 构建可定时关闭的异步提示弹窗 引言1、调用接口的实现2、自动定时窗口的实现 引言 我们在最常用最简单的提示弹框莫过于MessageBox.Show( )的方法了,但是使用久了之后,你会发现这个MessageBox并不是万能的,有事后并不想客户去点击&#x…...
2024/5/7 15:39:44 - 【自学记录5】【Pytorch2.0深度学习从零开始学 王晓华】第五章 基于Pytorch卷积层的MNIST分类实战
5.1.2 PyTorch2.0中卷积函数实现详解 1、torch.nn.Conv2d in_channels3: 输入的通道数,对应图像的3个颜色通道。 out_channels10: 输出的通道数,即卷积后我们想要得到的特征图的数量。 kernel_size3: 卷积核的大小,这里使用的是3x3的卷积核…...
2024/5/7 10:16:25 - 星际门计划:微软与OpenAI联手打造未来AI超级计算机
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
2024/5/5 9:17:00 - 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/5/7 19:05:20 - 【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/5/7 22:31:36 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/8 1:37:40 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/7 14:19:30 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/8 1:37:39 - 【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/5/7 16:57:02 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/7 14:58:59 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/7 1:54:46 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/7 21:15:55 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/8 1:37:35 - 用欧拉路径判断图同构推出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/5/7 16:05:05 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/7 16:04:58 - 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/5/8 1:37:32 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/7 16:05:05 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/8 1:37:31 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/8 1:37:31 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/8 12:44:41 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/8 9:51:44 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/8 1:37:29 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/7 17:09:45 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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