ThreadPoolExecutor源码分析

  • 核心接口
      • Executor
      • ExecutorService
      • AbstractExecutorService
  • 源码分析
    • 内部工作原理
      • 构造方法赋值
      • 属性分析
      • 内部工作类Worker
    • 线程池运行思路
      • Worker类源码分析
      • 构造方法
      • addWorker方法分析
      • run方法
      • runWorker方法
      • getTask方法
      • processWorkerExit方法
      • tryTerminate方法
      • shutdown方法
      • shutdownNow方法
      • interruptIdleWorkers方法
      • interruptIfStarted方法

核心接口

在这里插入图片描述

Executor

Executor只有一个execute方法抽象为对任务(Runnable接口)的执行

void execute(Runnable command);

ExecutorService

ExecutorService接口在Executor的基础上提供了对任务执行的生命周期的管理,主要是submit和shutdown方法

AbstractExecutorService

AbstractExecutorService对ExecutorService一些方法做了默认的实现,主要是submit和invoke方法。

真正的任务执行 的Executor接口execute方法是由子类实现,就是ThreadPoolExecutor,它实现了基于线程池的任务执行框架。

源码分析

ThreadPoolExecutor有5 个内部类
Worker、CallerRunsPolicy、AbortPolicy、DiscardPolicy、DiscardOldestPolicy
分两种类型:policy(策略) worker(工作)
policy :超出线程范围和队列容量时添加(task)任务执行的策略。
四种策略
AbortPolicy :抛出异常,默认
CallerRunsPolicy :不使用线程池执行
DiscardPolicy :直接丢弃任务
DiscardOldestPolicy :丢弃队列中最旧的任务
设置策略有两种方式:

RejectedExecutionHandler handler = new 
ThreadPoolExecutor.CallerRunsPolicy();
RejectedExecutionHandler handler = new 
ThreadPoolExecutor(2, 5, 60, TimeUnit.SECONDS, queue,handler);

worker :工作类(重点)。 后面详细分析分析

内部工作原理

构造方法赋值

	public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), defaultHandler);}public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,threadFactory, defaultHandler);}public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), handler);}public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize <= 0 ||maximumPoolSize < corePoolSize ||keepAliveTime < 0)throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw new NullPointerException();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;} 

corePoolSize :线程池核心线程数量,包括空闲线程。
maximumPoolSize:池中允许的最大线程数
keepAliveTime: 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间
unit:keepAliveTime 参数的时间单位
workQueue :执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务
threadFactory:执行程序创建新线程时使用的工厂
handler :由于超出线程范围和队列容量而使执行
分析源码:构造函数都是调用参数多的构造函数。结论:我们使用构造函数创建ThreadPoolExecutor对象时,threadFactory可以不传,默认使用Executors.defaultThreadFactory();handler可以不传,默认new AbortPolicy()策略,即抛出异常。

属性分析

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));private static final int COUNT_BITS = Integer.SIZE - 3;private static final int CAPACITY   = (1 << COUNT_BITS) - 1;// runState is stored in the high-order bitsprivate static final int RUNNING    = -1 << COUNT_BITS;private static final int SHUTDOWN   =  0 << COUNT_BITS;private static final int STOP       =  1 << COUNT_BITS;private static final int TIDYING    =  2 << COUNT_BITS;private static final int TERMINATED =  3 << COUNT_BITS;//得到线程池运行状态private static int runStateOf(int c)     { return c & ~CAPACITY; }//得到工作线程数量private static int workerCountOf(int c)  { return c & CAPACITY; }private static int ctlOf(int rs, int wc) { return rs | wc; }

ctl:这个变量是整个类的核心,AtomicInteger(原子操作类,理解为一个多线程同步操作时,可以保证原子性操作的Integer)类型保证了对这个变量的操作是原子的。

Integer.SIZE:为32,Integer的二进制32中最后一位表示正负数1:负数0:正数。所以经过按位运算ctl初始值为-536870912(二进制:101后面29个0)
这一个变量保存了两个内容:
1、所有有效线程的数量
2、各个线程的状态(runState)
低29位存线程数,高3位存runState,这样runState有5个值:
RUNNING:-536870912(二进制:101后面29个0)
SHUTDOWN:0(二进制:32个0)
STOP:536870912(二进制:001后面29个0)
TIDYING:1073741824: 所有的任务都已经停止,workerCount为0,线程变成TIDYING状态会运行terminate()(二进制:010后面29个0)
TERMINATED:1610612736:terminated()已经完成(二进制:011后面29个0)

线程池中各个状态间的转换比较复杂:
RUNNING状态:线程池正常运行,可以接受新的任务并处理队列中的任务;
SHUTDOWN状态:不再接受新的任务,但是会执行队列中的任务;
STOP状态:不再接受新任务,不处理队列中的任务

内部工作类Worker

private final class Workerextends AbstractQueuedSynchronizerimplements Runnable{/*** This class will never be serialized, but we provide a* serialVersionUID to suppress a javac warning.*/private static final long serialVersionUID = 6138294804551838833L;/** Thread this worker is running in.  Null if factory fails. */final Thread thread;/** Initial task to run.  Possibly null. */Runnable firstTask;/** Per-thread task counter */volatile long completedTasks;/*** Creates with given first task and thread from ThreadFactory.* @param firstTask the first task (null if none)*/Worker(Runnable firstTask) {setState(-1); // inhibit interrupts until runWorkerthis.firstTask = firstTask;this.thread = getThreadFactory().newThread(this);}/** Delegates main run loop to outer runWorker  */public void run() {runWorker(this);}// Lock methods//// The value 0 represents the unlocked state.// The value 1 represents the locked state.protected boolean isHeldExclusively() {return getState() != 0;}protected boolean tryAcquire(int unused) {if (compareAndSetState(0, 1)) {setExclusiveOwnerThread(Thread.currentThread());return true;}return false;}protected boolean tryRelease(int unused) {setExclusiveOwnerThread(null);setState(0);return true;}public void lock()        { acquire(1); }public boolean tryLock()  { return tryAcquire(1); }public void unlock()      { release(1); }public boolean isLocked() { return isHeldExclusively(); }void interruptIfStarted() {Thread t;if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) {try {t.interrupt();} catch (SecurityException ignore) {}}}}

Worker类继承于AbstractQueuedSynchronizer类,任务执行时获取释放锁,这样可以防止中断,目的在于唤醒线程,而不是中断正在执行的任务。

用AQS框架实现了一个简单的非重入的互斥锁, 实现互斥锁主要目的是为了中断的时候判断线程是在空闲还是运行

之所以不用ReentrantLock是为了避免任务执行的代码中修改线程池的变量,如setCorePoolSize,因为ReentrantLock是可重入的。

线程池运行思路

使用线程池运行任务时,调用线程池的submit 或者 execute 方法执行任务。execute方法为执行方法,没有返回值。submit方法由抽象类AbstractExecutorService实现内部调用了execute方法(这里使用了模板模式,execute方法由子类实现,AbstractExecutorService本身不实现这个方法),然后返回Future结果。

AbstractExecutorService类中submit方法的实现代码
/*** @throws RejectedExecutionException {@inheritDoc}* @throws NullPointerException       {@inheritDoc}*/public Future<?> submit(Runnable task) {if (task == null) throw new NullPointerException();RunnableFuture<Void> ftask = newTaskFor(task, null);execute(ftask);return ftask;}/*** @throws RejectedExecutionException {@inheritDoc}* @throws NullPointerException       {@inheritDoc}*/public <T> Future<T> submit(Runnable task, T result) {if (task == null) throw new NullPointerException();RunnableFuture<T> ftask = newTaskFor(task, result);execute(ftask);return ftask;}/*** @throws RejectedExecutionException {@inheritDoc}* @throws NullPointerException       {@inheritDoc}*/public <T> Future<T> submit(Callable<T> task) {if (task == null) throw new NullPointerException();RunnableFuture<T> ftask = newTaskFor(task);execute(ftask);return ftask;}

运行思路:
提交一个任务到线程池中,线程池的处理流程如下:
1、判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程。
2、线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。
3、判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。

execute调用流程

public void execute(Runnable command) {if (command == null)throw new NullPointerException();//AtomicInteger类中的get方法获取对象Integer值int c = ctl.get();//workerCountOf方法获取工作线程数//判断工作线程数是否小余核心线程数if (workerCountOf(c) < corePoolSize) {//直接启动新的线程。第二个参数true:addWorker中会重新检查workerCount是否小于corePoolSizif (addWorker(command, true))return;c = ctl.get();}//isRunning方法线程池是否为RUNNING状态//workQueue.offer方法添加一个任务到队列中//活动线程数 >= corePoolSize,runState为RUNNING && 队列未满if (isRunning(c) && workQueue.offer(command)) {int recheck = ctl.get();//runState为不为RUNNING,则从workQueue中移除任务if (! isRunning(recheck) && remove(command))// 采用线程池指定的策略拒绝任务reject(command);//线程池处于RUNNING状态 || 线程池处于非RUNNING状态但是任务移除失败//如果线程数为0else if (workerCountOf(recheck) == 0)//这行代码是为了SHUTDOWN状态下没有活动线程了,但是队列里还有任务没执行这种特殊情况。//添加一个null任务是因为SHUTDOWN状态下,线程池不再接受新任务addWorker(null, false);}//两种情况://非RUNNING状态执行reject方法,采用线程池指定的策略拒绝任务//队列满了启动新的非核心线程-如果启动非核心线程失败则执行reject方法,采用线程池指定的策略拒绝任务else if (!addWorker(command, false))reject(command);}

Worker类源码分析

构造方法

Worker(Runnable firstTask) {//设置线程的中断状态,这里设置为-1.抑制了线程中断setState(-1); // inhibit interrupts until runWorker//将任务赋值给Worker的一个Runnable属性对象this.firstTask = firstTask;//Worker实现了Runnable接口,所以可以将自己当作一个任务创建一个thread线程this.thread = getThreadFactory().newThread(this);}

addWorker方法分析

private boolean addWorker(Runnable firstTask, boolean core) {retry:for (;;) {int c = ctl.get();int rs = runStateOf(c);// 这条语句等价:rs >= SHUTDOWN && (rs != SHUTDOWN || firstTask != null || workQueue.isEmpty())// 满足下列三个条件之一则直接返回false,线程创建失败:// rs > SHUTDOWN:STOP || TIDYING || TERMINATED 此时不再接受新的任务,且所有任务执行结束// rs = SHUTDOWN:firtTask != null 此时不再接受任务,但是仍然会执行队列中的任务// rs = SHUTDOWN:firtTask == null:workQueue为空。// execute方法的addWorker(null,false),任务为null && 队列为空// 最后一种情况也就是说SHUTDONW状态下,如果队列不为空还得接着往下执行,为什么?add一个null任务目的到底是什么?// 看execute方法只有workCount==0的时候firstTask才会为null结合这里的条件就是线程池SHUTDOWN了不再接受新任务// 但是此时队列不为空,那么还得创建线程把任务给执行完才行if (rs >= SHUTDOWN &&! (rs == SHUTDOWN &&firstTask == null &&! workQueue.isEmpty()))return false;//两种情况:// 1.线程池状态为RUNNING// 2.SHUTDOWN状态,但队列中还有任务需要执行for (;;) {int wc = workerCountOf(c);//做判断,工作线程如果大于Ineger二进制29位1(线程数太多)//或者是创建核心线程时大于核心线程数,创建非核心线程时大于最大线程数//则直接返回falseif (wc >= CAPACITY ||wc >= (core ? corePoolSize : maximumPoolSize))return false;// 原子操作递增workCount(线程数)if (compareAndIncrementWorkerCount(c))//操作成功跳出的重试的循环break retry;c = ctl.get();  // Re-read ctl// 如果线程池的状态发生变化则重试if (runStateOf(c) != rs)continue retry;// else CAS failed due to workerCount change; retry inner loop}}//线程数原子操作递增成功,执行以下代码boolean workerStarted = false;boolean workerAdded = false;Worker w = null;try {w = new Worker(firstTask);final Thread t = w.thread;if (t != null) {final ReentrantLock mainLock = this.mainLock;// 并发的访问线程池workers(源码中是一个HashSet对象)对象必须加锁mainLock.lock();try {// Recheck while holding lock.// Back out on ThreadFactory failure or if// shut down before lock acquired.int rs = runStateOf(ctl.get());// RUNNING状态 || SHUTDONW状态下清理队列中剩余的任务if (rs < SHUTDOWN ||(rs == SHUTDOWN && firstTask == null)) {if (t.isAlive()) // precheck that t is startablethrow new IllegalThreadStateException();// 将新启动的线程添加到线程池中workers.add(w);// 更新largestPoolSizint s = workers.size();if (s > largestPoolSize)largestPoolSize = s;workerAdded = true;}} finally {mainLock.unlock();}// 启动新添加的线程,这个线程首先执行firstTask,然后不停的从队列中取任务执行// 当等待keepAlieTime还没有任务执行则该线程结束。见runWoker和getTask方法的代码。if (workerAdded) {//执行Worker的run方法t.start();workerStarted = true;}}} finally {// 线程启动失败,则从wokers中移除w并递减wokerCountif (! workerStarted)// 递减wokerCount会触发tryTerminate方法addWorkerFailed(w);}return workerStarted;}

所以任务添加成功后实际执行的是run方法

run方法

/** Delegates main run loop to outer runWorker  */public void run() {runWorker(this);}

Worker中的run方法,执行Worker的runWorker方法:

所以最后任务添加成功后实际执行的是runWorker这个方法,简单来说它做的就是:

第一次启动会执行初始化传进来的任务firstTask;
然后会从workQueue中取任务执行,如果队列为空则等待keepAliveTime这么长时间。

runWorker方法

final void runWorker(Worker w) {Thread wt = Thread.currentThread();Runnable task = w.firstTask;w.firstTask = null;// Worker的构造函数中抑制了线程中断setState(-1),所以这里需要unlock从而允许中断w.unlock(); // allow interrupts// 用于标识是否异常终止,finally中processWorkerExit的方法会有不同逻辑// 为true的情况:1.执行任务抛出异常;2.被中断。boolean completedAbruptly = true;try {// 如果getTask返回null那么getTask中会将workerCount递减,如果异常了这个递减操作会在processWorkerExit中处理while (task != null || (task = getTask()) != null) {w.lock();// If pool is stopping, ensure thread is interrupted;// if not, ensure thread is not interrupted.  This// requires a recheck in second case to deal with// shutdownNow race while clearing interruptif ((runStateAtLeast(ctl.get(), STOP) ||(Thread.interrupted() &&runStateAtLeast(ctl.get(), STOP))) &&!wt.isInterrupted())wt.interrupt();try {// 任务执行前可以插入一些处理,子类重载该方法beforeExecute(wt, task);Throwable thrown = null;try {//执行用户任务task.run();} catch (RuntimeException x) {thrown = x; throw x;} catch (Error x) {thrown = x; throw x;} catch (Throwable x) {thrown = x; throw new Error(x);} finally {// 和beforeExecute一样,留给子类去重载afterExecute(task, thrown);}} finally {task = null;w.completedTasks++;w.unlock();}}completedAbruptly = false;} finally {// 结束线程的一些清理工作processWorkerExit(w, completedAbruptly);}}

getTask方法

private Runnable getTask() {boolean timedOut = false; // Did the last poll() time out?for (;;) {int c = ctl.get();int rs = runStateOf(c);// Check if queue empty only if necessary.// 1.rs > SHUTDOWN 所以rs至少等于STOP,这时不再处理队列中的任务// 2.rs = SHUTDOWN 所以rs>=STOP肯定不成立,这时还需要处理队列中的任务除非队列为空// 这两种情况都会返回null让runWoker退出while循环也就是当前线程结束了,所以必须要decrement// wokerCountif (rs >= SHUTDOWN && (rs >= STOP || workQueue.isEmpty())) {// 递减workerCount值decrementWorkerCount();return null;}int wc = workerCountOf(c);// Are workers subject to culling?// Are workers subject to culling?// 1.core thread允许被超时,那么超过corePoolSize的的线程必定有超时// 2.allowCoreThreadTimeOut == false && wc >// corePoolSize时,一般都是这种情况,core thread即使空闲也不会被回收,只要超过的线程才会boolean timed = allowCoreThreadTimeOut || wc > corePoolSize;// 从addWorker可以看到一般wc不会大于maximumPoolSize,所以更关心后面半句的情形:// 1. timedOut == false 第一次执行循环, 从队列中取出任务不为null方法返回 或者// poll出异常了重试// 2.timeOut == true && timed ==// false:看后面的代码workerQueue.poll超时时timeOut才为true,// 并且timed要为false,这两个条件相悖不可能同时成立(既然有超时那么timed肯定为true)// 所以超时不会继续执行而是return null结束线程。(重点:线程是如何超时的???)if ((wc > maximumPoolSize || (timed && timedOut))&& (wc > 1 || workQueue.isEmpty())) {// workerCount递减,结束当前threadif (compareAndDecrementWorkerCount(c))return null;continue;}try {// 1.以指定的超时时间从队列中取任务// 2.core thread没有超时Runnable r = timed ?workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) :workQueue.take();if (r != null)return r;// 超时timedOut = true;} catch (InterruptedException retry) {// 线程被中断重试timedOut = false;}}}

processWorkerExit方法

线程退出或者异常结束后会执行这个方法做一些清理工作

private void processWorkerExit(Worker w, boolean completedAbruptly) {// 正常的话再runWorker的getTask方法workerCount已经被减一了if (completedAbruptly) // If abrupt, then workerCount wasn't adjusteddecrementWorkerCount();final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {// 累加线程的completedTaskscompletedTaskCount += w.completedTasks;// 从线程池中移除超时或者出现异常的线程workers.remove(w);} finally {mainLock.unlock();}// 尝试停止线程池tryTerminate();int c = ctl.get();// runState为RUNNING或SHUTDOWNif (runStateLessThan(c, STOP)) {// 线程不是异常结束if (!completedAbruptly) {// 线程池最小空闲数,允许core thread超时就是0,否则就是corePoolSizeint min = allowCoreThreadTimeOut ? 0 : corePoolSize;// 如果min == 0但是队列不为空要保证有1个线程来执行队列中的任务if (min == 0 && ! workQueue.isEmpty())min = 1;// 线程池还不为空那就不用担心了if (workerCountOf(c) >= min)return; // replacement not needed}// 1.线程异常退出// 2.线程池为空,但是队列中还有任务没执行,看addWoker方法对这种情况的处理addWorker(null, false);}}

tryTerminate方法

尝试停止线程池。processWorkerExit方法中会尝试调用tryTerminate来终止线程池。这个方法在任何可能导致线程池终止的动作后执行:比如减少wokerCount或SHUTDOWN状态下从队列中移除任务。

final void tryTerminate() {for (;;) {int c = ctl.get();// 以下状态直接返回:// 1.线程池还处于RUNNING状态// 2.SHUTDOWN状态但是任务队列非空// 3.runState >= TIDYING 线程池已经停止了或在停止了if (isRunning(c) ||runStateAtLeast(c, TIDYING) ||(runStateOf(c) == SHUTDOWN && ! workQueue.isEmpty()))return;// 只能是以下情形会继续下面的逻辑:结束线程池。// 1.SHUTDOWN状态,这时不再接受新任务而且任务队列也空了// 2.STOP状态,当调用了shutdownNow方法// workerCount不为0则还不能停止线程池,而且这时线程都处于空闲等待的状态// 需要中断让线程“醒”过来,醒过来的线程才能继续处理shutdown的信号。if (workerCountOf(c) != 0) { // Eligible to terminate// runWoker方法中w.unlock就是为了可以被中断,getTask方法也处理了中断。// ONLY_ONE:这里只需要中断1个线程去处理shutdown信号就可以了。interruptIdleWorkers(ONLY_ONE);return;}final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {// 进入TIDYING状态if (ctl.compareAndSet(c, ctlOf(TIDYING, 0))) {try {// 子类重载:一些资源清理工作terminated();} finally {// TERMINATED状态ctl.set(ctlOf(TERMINATED, 0));// 继续awaitTerminationtermination.signalAll();}return;}} finally {mainLock.unlock();}// else retry on failed CAS}}

shutdown方法

会将runState置为SHUTDOWN,会终止所有空闲的线程。

public void shutdown() {final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {checkShutdownAccess();// 线程池状态设为SHUTDOWN,如果已经至少是这个状态那么则直接返回advanceRunState(SHUTDOWN);// 注意这里是中断所有空闲的线程:runWorker中等待的线程被中断 → 进入processWorkerExit →// tryTerminate方法中会保证队列中剩余的任务得到执行。interruptIdleWorkers();onShutdown(); // hook for ScheduledThreadPoolExecutor} finally {mainLock.unlock();}tryTerminate();}

shutdownNow方法

将runState置为STOP。和shutdown方法的区别,这个方法会终止所有的线程。

public List<Runnable> shutdownNow() {List<Runnable> tasks;final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {checkShutdownAccess();// STOP状态:不再接受新任务且不再执行队列中的任务advanceRunState(STOP);// 中断所有线程interruptWorkers();// 返回队列中还没有被执行的任务tasks = drainQueue();} finally {mainLock.unlock();}tryTerminate();return tasks;}

两个方法的主要区别在于shutdown方法调用的是interruptIdleWorkers方法,而shutdownNow方法实际调用的是Worker类的interruptIfStarted方法:

interruptIdleWorkers方法

private void interruptIdleWorkers(boolean onlyOne) {final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {for (Worker w : workers) {Thread t = w.thread;// w.tryLock能获取到锁,说明该线程没有在运行,因为runWorker中执行任务会先lock,// 因此保证了中断的肯定是空闲的线程。if (!t.isInterrupted() && w.tryLock()) {try {t.interrupt();} catch (SecurityException ignore) {} finally {w.unlock();}}if (onlyOne)break;}} finally {mainLock.unlock();}}

interruptIfStarted方法

void interruptIfStarted() {Thread t;if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) {try {t.interrupt();} catch (SecurityException ignore) {}}}

这里就体现出了Woker类实现AQS的主要作用。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. PAT1003 Emergency 单源最短路dijkstra算法解决 C++

    1003 Emergency (25分) 这道题目大概的意思是:有N个城市(编号为0~N-1),它们之间一共有M条路,求从编号为C1的城市到C2的最短路径的条数,并求出其最短路径当中能够召集最大队伍的数量。 我在做题时遇到的tips:可以自己到自己,也就是0到0(测试点1); 应该为无向图; 最短…...

    2024/4/20 2:19:18
  2. js求1-100之间所有数的总和与平均值

    js代码: // 求1-100之间所有数的总和与平均值var num=100;var sum=0;for(var i=0;i<=num;i++){sum += i;}console.log("1-100所有数和为:"+ sum);console.log("1-100所有数和的平均值为:"+ sum/num);控制台输出结果:...

    2024/4/16 16:44:43
  3. Spring Boot 数据验证简介

    简述 在软件开发过程中,经常遇到验证属性的合法性.在未使用标签验证的情况下,会使用大量的if语句校验数据的合法性.如 if (StringUtils.isEmpty(user.getUserName())) {throw new RuntimeException("参数异常"); } if (StringUtils.isEmpty(user.getEmail())) {throw…...

    2024/4/15 6:55:31
  4. FPGA开发软件 ISE14.7兼容性问题解决方案

    今天给大侠带来FPGA开发软件 ISE14.7兼容性问题解决方案,话不多说,上货。对于电子工程师来说,很多电路设计仿真软件都是特别大的,安装下来一般都是上G,甚至几十G,而且win7的兼容性也是最好的,不愿意升级win10是因为麻烦,而且没有必要,对于很多的设计软件来说win10还没…...

    2024/4/16 16:44:43
  5. 决策树的生成之ID3与C4.5算法

    跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注! 1 基本概念 在正式介绍决策树的生成算法前,我们先将上一篇文章中介绍的几个概念重新梳理一下;并且同时再通过一个例子来熟悉一下计算过程,以便于后续更好的理解决策树的生成算法。 1.1 信息熵 设XXX是…...

    2024/4/16 16:47:03
  6. 信息学奥赛一本通(C++版)1398:短信计费

    1398:短信计费 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 15268 通过数: 6987 【题目描述】 用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短…...

    2024/4/16 16:47:14
  7. 前端工程化

    1.模块化的分类 A.浏览器端的模块化1).AMD(Asynchronous Module Definition,异步模块定义)代表产品为:Require.js2).CMD(Common Module Definition,通用模块定义)代表产品为:Sea.jsB.服务器端的模块化服务器端的模块化规范是使用CommonJS规范:1).使用require引入其他模块或者…...

    2024/4/16 16:46:14
  8. 【转载】别让自己“墙”了自己

    在coolshell上看的一篇陈晧老师写的文章,感触很深,大一大二两年感觉自己仅仅只学习了课程要求的c/c++,数据结构…平常想着学好课程要求外加自己的实验室机器人参与经历和几个大赛的奖就可以在毕业后考研、工作中吃香了,现在大二要结束了,感觉自己真是井底之蛙。大二末开始…...

    2024/4/16 16:47:37
  9. 9.3 Servlet中的Listener&Filter

    前言 这几章都比较枯燥哈,要耐心一点,配置这些也很重要&有必要(相比于业务处理)。 万一出了什么幺蛾子,同时你知道了是配置、初始化的问题,就可以从学的这些入手来Debug了。 Servlet 中的 Listener(监听器) 基础知识 在设计模式——观察者模式设计中,最容易理解和体…...

    2024/4/24 8:07:53
  10. awvs使用遇到的问题,交流群

    最近安装了awvs,使用过程中遇到的问题,可以进群交流安装问题 本地部署可以正常使用,centos上部署后无法扫描Threat level could not be determined because the target was not responsive 。。。问题会出现的问题应该挺多的,微信扫码进群交流...

    2024/4/24 8:07:50
  11. 心肌微血管显影的超谐波超声成像设备

    概述1.背景及研究意义据世界卫生组织报道,心血管疾病是造成人类死亡的第一杀手。其中,有大于一半的心血管疾病都与心肌的血供障碍有关疾病,近两年中国心血管病报告指出,在中国、心血管疾病的患病率和致残致死率仍在快速上升,心血管疾病已经给无数的家庭带来沉重的经济和精…...

    2024/4/24 8:07:47
  12. 老板扣我1000元“血汗钱”,只因没记住阿里开发手册的这条规则

    本文故事构思来源于脉脉上的一篇帖子“一行代码引发的血案”。其实关于字符串的文章,我之前也写过一篇《诡异的字符串问题》,字符串对于我们开发者而言,可以用最近很流行的一句话“用起来好嗨哟,仿佛人生达到了巅峰”。确实大家都用的很嗨,很便利,但 JDK 的工程师在背后付…...

    2024/4/24 8:07:46
  13. 基于FPGA 视网膜机理的色调映射处理器

    项目来源:第十四届研究生电子设计竞赛概述图像作为当前人工智能技术发展当中的重要组成部分,已经得到越来越多学者的重视和研究。在人脸识别、图像分类、目标跟踪等神经网络的应用场合,图像中的信息提取是实现相关技术的基础。因此如何将弱光或者局部过暗的图像中的信息更好…...

    2024/4/24 8:07:45
  14. 双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

    前言前两天,我收到了阿里巴巴的实习offer,从学长内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了实习offer。自我介绍本人来自西南某双非本科学校,该校学的专业是物联网工程。我的专业与Java开发关…...

    2024/4/24 8:07:44
  15. 【零代码爬虫】如何使用webscraper插件爬取数据,以淘宝网为例

    1. 安装插件 可以打开chrome store 的用户直接在里面搜索即可 无法科学上网的用户,我也准备了webscraper的安装包领取方式如下:公众号【小洲三流road】后台回复webscraper获得本地解压安装包,最好放在新建的chrome 插件文件夹中,方便管理 在chrome浏览器中输入:chrome://e…...

    2024/4/24 8:07:44
  16. 手持医学影像智能分析仪

    概述研究背景在疾病诊断中,医学影像学占有重要地位。医学影像数据以每年 30%的速度增长,占医院数字化数据的 90%[2],放射科医师每天的图像数据浏览工作量剧增,且每年医疗资源和人力投入增长远远不能满足需求[3],多重因素使放射科医师的工作超负荷。AI 技术可以利用高性能的…...

    2024/4/24 8:07:42
  17. 阿里java开发手册学习笔记(二、 异常日志)

    异常日志(一)异常处理(二)日志规约 (一)异常处理Java 类库中定义的可以通过预检查方式规避的 RuntimeException 异常不应该过 catch 的方式来处理,比如:NullPointerException,IndexOutOfBoundsException 等。 异常不要用来做流程控制,条件控制。 catch 时请分清稳定代…...

    2024/4/24 8:07:48
  18. NumPy基础:使用数组进行文件输入和输出,线性代数,伪随机数生成,示例:随机漫步

    使用数组进行文件输入和输出 numpy 可以在硬盘中将数据以文本或二进制文件的形式进行存入硬盘或有硬盘载入。我们只讨论numpy 的内建二进制格式,pandans 或其他工具用来载入文本或表格型数据。np.save 和 np.load 是高效存取硬盘数据的方法。数组默认情况下是以未压缩的格式进…...

    2024/4/24 8:07:43
  19. 教你破解复制网站不能文字+白嫖某度等各种文档

    每次写作业都需要在网上搜集很多资料,但是好不容易搜集到啦,想要下载告诉我要收费。那我可定不能干啊,于是我就要拿出我的 C V 大法。 结果啪啪大脸,复制不了。 白piao实属不易啊,遇到了各种阻碍,一路过关斩将,绝不向收费势力低头,在白piao的路上越走越远。 一般来说,…...

    2024/4/24 8:07:39
  20. hualinux c 1.4:win CLion远程centos8开发C/C++

    目录前言一、环境说明1.1 说明1.2 centos8相关设置1.2.1centos8安装兼容包(已安装)1.2.2关闭selinux(重要)1.2.3关闭防火墙1.2.4时间同步(最好要)1.2.5 安装第三方源epel源及remi源1.2.6在history命令前添加时间显示1.2.7 修改文件连接数1.3 centos8安装gcc、make、cmak、g…...

    2024/4/15 6:55:42

最新文章

  1. 【k8s】(一)kubernetes1.29.4离线部署之-安装文件准备

    &#xff08;一&#xff09;kubernetes1.29.4离线部署之-安装文件准备 &#xff08;二&#xff09;kubernetes1.29.4离线部署之-镜像文件准备 &#xff08;三&#xff09;kubernetes1.29.4离线部署之-环境初始化 &#xff08;四&#xff09;kubernetes1.29.4离线部署之-组件安装…...

    2024/4/24 11:27:57
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. DevOps三步法之反馈:流动是油门,反馈是刹车

    打个比方&#xff0c;流动是油门&#xff0c;反馈是刹车。流动是关于行使&#xff0c;反馈是关于安全。车辆要想持续平稳运行&#xff0c;需要油门与刹车良好配合&#xff0c;否则就有可能车毁人亡。核电站需要使核反应处于临界状态&#xff0c;超出临界状态就是核爆炸这也需要…...

    2024/4/23 17:59:31
  4. 三防笔记本丨工业笔记本电脑丨车辆检修的应用以及优势

    伴随着汽车技术的不断更新迭代以及车辆复杂性的增加&#xff0c;现代车辆检修工作需要更高效、更精确的方法来确保车辆的安全和性能。在这过程中&#xff0c;工业笔记本电脑作为一种强大的工具&#xff0c;为车辆检修提供了诊断、记录、分析和解决问题的核心功能 故障诊断与维修…...

    2024/4/23 6:25:48
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/23 20:58:27
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/23 13:30:22
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/23 13:28:06
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/20 23:26:47
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/23 13:27:44
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/19 11:57:53
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/23 13:29:53
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/23 13:27:22
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/23 13:28:42
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/23 22:01:21
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/23 13:29:23
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/23 13:27:46
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/23 13:47:22
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/19 11:59:23
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/19 11:59:44
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/23 13:28:08
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/23 13:29:47
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/23 13:28:14
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/23 13:27:51
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/23 13:27:19
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在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