java线程取消与关闭的多种方法
目录
1.任务取消
1.1通过volatile类型的域来保存取消状态
1.2通过 future 的cancel取消线程
1.3使用interrupt()方法中断当前线程
1.4使用shutdown()和shutdownNow()
1.4.1 shutdown()
1.4.2 shutdownNow()
1.5使用stop方法终止线程
2.停止基于线程的服务
2.1关闭ExecutorService
2.2毒丸对象
3.3只执行一次的服务
3.JVM关闭钩子
要使任务和线程安全、快速、可靠的停止下来并不是一件容易的事情。java没有提供任何机制来安全的终止线程。但它提供了中断(Interruption),这是一种协作机制能够使一个线程终止另一个线程的当前工作。
1.任务取消
1.1通过volatile类型的域来保存取消状态
一般run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。使用一个变量来控制循环,例如:最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出,代码示例:
一个仅运行一秒的素数生成器 * 线程的取消与关闭 通过cancel方法将设置标志 并且主循环会检车这个标志, * 为了使这个过程可靠的工作 标志cancelled必须为 volatile
- package com.cocurrent.demo;
-
- import java.math.BigInteger;
- import java.util.ArrayList;
- import java.util.List;
-
- import static java.util.concurrent.TimeUnit.SECONDS;
-
- /**
- * @Author: nanJunYu
- * @Description: 一个仅运行一秒的素数生成器
- * 线程的取消与关闭 通过cancel方法将设置标志 并且主循环会检车这个标志,
- * 为了使这个过程可靠的工作 标志cancelled必须为 volatile
- * @Date: Create in 2018/9/11 15:21
- */
- public class CancelVolatile implements Runnable {
-
- private final List<BigInteger> pri = new ArrayList<BigInteger>();
-
- private volatile boolean cancelled;
-
- public void run() {
- BigInteger p = BigInteger.ONE;
- while (!cancelled) {
- p = p.nextProbablePrime();
- synchronized (this) {
- pri.add(p);
- }
- }
- }
-
- private void cancel() {
- cancelled = true;
- }
-
- private synchronized List<BigInteger> get() {
- return new ArrayList<BigInteger>(pri);
- }
-
- public static void main(String[] args) {
- CancelVolatile cancelVolatile = new CancelVolatile();
- new Thread(cancelVolatile).start();
- try {
- SECONDS.sleep(1);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- cancelVolatile.cancel();
- }
- System.out.println(cancelVolatile.get());
- }
- }
CancelVolatile中的取消机制最终会使得搜索的素数任务退出,但是退出过程中需要花费一定的时间,然而,如果任务调度了一些阻塞方法,(BlockingQueue.put)那么可能产生一个问题——任务可能永远不会检查取消标示,永远不会结束。为取保线程能退出,我们通常使用中断,当我们调用interrupt,并不意味着立即停止目标线程正在运行的线程,而只是传递了一个请求中断的信息,它会在线程下一个合适的的时刻中断自己。wait、sleep、join、将严格处理这种请求,当他们收到一个中断请求,或饿着开始执行时发现中断状态时,将抛出异常。
使用静态的interrupted时应该小心,因为它会清除当前线程的中断状态,如果返回true,除非你你想屏蔽这个中断,否则必须对它进行处理,抛出异常或者再次调用interrupt来恢复中断状态
- try {
- ...
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
通常,我们用中断来取消任务比检查标记更好,是最合适的取消任务方式,我们看一个更加健壮的获得素数的类。
- public class PrimeProducer extends Thread{
-
- private final BlockingQueue<BigInteger> queue;
-
- public PrimeProducer(BlockingQueue<BigInteger> queue) {
- this.queue = queue;
- }
-
- @Override
- public void run() {
- try {
- BigInteger p = BigInteger.ONE;
- while(!Thread.currentThread().isInterrupted()) //①用线程的状态来检查
- queue.put(p = p.nextProbablePrime());
-
- } catch (InterruptedException e) {
- //中断将线程退出
- }
- }
- public void cancel() { interrupt(); }
-
- }
1.2通过 future 的cancel取消线程
- package com.cocurrent.demo;
-
- import java.util.concurrent.*;
-
- /**
- * @Author: nanJunYu
- * @Description:通过 future 的cancel取消线程
- * @Date: Create in 2018/9/12 16:41
- */
- public class FutureCancel {
- public static void timeRun(Runnable runnable, Long timeout, TimeUnit timeUnit) throws InterruptedException {
- ExecutorService executorService = Executors.newSingleThreadExecutor();
- Future<?> future = executorService.submit(runnable);
- try {
- future.get(timeout,timeUnit);
- } catch (ExecutionException e) {
- e.printStackTrace();
- } catch (TimeoutException e) {
- e.printStackTrace();
- }finally {
- future.cancel(true);
- }
- }
- }
1.3使用interrupt()方法中断当前线程
在程序中,我们是不能随便中断一个线程的,因为这是极其不安全的操作,我们无法知道这个线程正运行在什么状态,它可能持有某把锁,强行中断可能导致锁不能释放的问题;或者线程可能在操作数据库,强行中断导致数据不一致混乱的问题。正因此,JAVA里将Thread的stop方法设置为过时,以禁止大家使用。
一个线程什么时候可以退出呢?当然只有线程自己才能知道。
所以我们这里要说的Thread的interrrupt方法,本质不是用来中断一个线程。是将线程设置一个中断状态。
当我们调用线程的interrupt方法,它有两个作用:
1、如果此线程处于阻塞状态(比如调用了wait方法,io等待),则会立马退出阻塞,并抛出InterruptedException异常,线程就可以通过捕获InterruptedException来做一定的处理,然后让线程退出。
2、如果此线程正处于运行之中,则线程不受任何影响,继续运行,仅仅是线程的中断标记被设置为true。所以线程要在适当的位置通过调用isInterrupted方法来查看自己是否被中断,并做退出操作。
- package com.cocurrent.demo;
-
- /**
- * @Author: nanJunYu
- * @Description:线程的中断方法测试
- * @Date: Create in 2018/9/11 17:16
- */
- public class InterruptedDemo {
- public static void main(String[] args) throws InterruptedException {
- Thread thread = new Thread(new Work());
- thread.start();
-
- Thread.sleep(1000);
- thread.interrupt();
- System.out.println("Main thread stopped.");
-
- }
-
- public static class Work implements Runnable {
-
- public void run() {
- System.out.println("我在做一些事情。。。");
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- Thread curr = Thread.currentThread();
- //再次调用interrupt方法中断自己,将中断状态设置为“中断”
- curr.interrupt();
- System.out.println("Worker IsInterrupted: " + curr.isInterrupted());
- System.out.println("Worker IsInterrupted: " + curr.isInterrupted());
- System.out.println("Static Call: " + Thread.interrupted());//clear status
- System.out.println("---------After Interrupt Status Cleared----------");
- System.out.println("Static Call: " + Thread.interrupted());
- System.out.println("Worker IsInterrupted: " + curr.isInterrupted());
- System.out.println("Worker IsInterrupted: " + curr.isInterrupted());
- }
-
- System.out.println("Worker stopped.");
-
- }
- }
- }
1.4使用shutdown()和shutdownNow()
1.4.1 shutdown()
将线程池状态置为SHUTDOWN
,并不会立即停止:
- 停止接收外部submit的任务
- 内部正在跑的任务和队列里等待的任务,会执行完
- 等到第二步完成后,才真正停止
shutdown方法源码
- public void shutdown() {
- final ReentrantLock mainLock = this.mainLock;
- mainLock.lock();
- try {
- checkShutdownAccess();
- advanceRunState(SHUTDOWN);
- interruptIdleWorkers();
- onShutdown(); // hook for ScheduledThreadPoolExecutor
- } finally {
- mainLock.unlock();
- }
- tryTerminate();
- }
1.4.2 shutdownNow()
将线程池状态置为STOP
。企图立即停止,事实上不一定:
- 跟shutdown()一样,先停止接收外部提交的任务
- 忽略队列里等待的任务
- 尝试将正在跑的任务
interrupt
中断 - 返回未执行的任务列表
shutdownNow源码
- public List<Runnable> shutdownNow() {
- List<Runnable> tasks;
- final ReentrantLock mainLock = this.mainLock;
- mainLock.lock();
- try {
- checkShutdownAccess();
- advanceRunState(STOP);
- interruptWorkers();
- tasks = drainQueue();
- } finally {
- mainLock.unlock();
- }
- tryTerminate();
- return tasks;
- }
从源码可以很清晰的看出两者的区别,shutdown使用了以后会置状态为SHUTDOWN,而shutdownNow为STOP。此外,shutdownNow会返回任务列表。
1.5使用stop方法终止线程
程序中可以直接使用thread.stop()来强行终止线程,但是stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror的错误,并且会释放子线程所持有的所有锁。一般任何进行加锁的代码块,都是为了保护数据的一致性,如果在调用thread.stop()后导致了该线程所持有的所有锁的突然释放(不可控制),那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。因此,并不推荐使用stop方法来终止线程
2.停止基于线程的服务
2.1关闭ExecutorService
ExecutorService提供两个关闭的方法,shutdown 和shutdownNow。shutdownNow首先关闭当前执行线程,然后返回未执行的任务,而shutdown则等待执行完成。两种方法差别在于安全性和响应性。
直接看例子了,这没什么好说的。
- package com.cocurrent.demo;
-
- import java.util.concurrent.*;
-
- /**
- * @Author: nanJunYu
- * @Description:
- * @Date: Create in 2018/9/12 17:42
- */
- public class ExecutorServiceCancelB {
-
- public static class MyCallable implements Callable {
-
- private int flag = 0;
-
- public MyCallable(int flag) {
- this.flag = flag;
- }
-
- public String call() throws Exception {
-
- if (this.flag == 0) {
- return "flag = 0";
- }
- if (this.flag == 1) {
- try {
- while (true) {
- System.out.println("looping.");
- Thread.sleep(2000);
- }
- } catch (InterruptedException e) {
- System.out.println("Interrupted");
- }
- return "false";
- } else {
- throw new Exception("Bad flag value!");
- }
- }
- }
-
- public static void main(String[] args) {
-
- // 定义3个Callable类型的任务
- MyCallable task1 = new MyCallable(0);
- MyCallable task2 = new MyCallable(1);
- MyCallable task3 = new MyCallable(2);
-
- // 创建一个执行任务的服务
- ExecutorService es = Executors.newFixedThreadPool(3);
- try {
- // 提交并执行任务,任务启动时返回了一个Future对象,
- // 如果想得到任务执行的结果或者是异常可对这个Future对象进行操作
- Future future1 = es.submit(task1);
- // 获得第一个任务的结果,如果调用get方法,当前线程会等待任务执行完毕后才往下执行
- System.out.println("task1: " + future1.get());
-
- Future future2 = es.submit(task2);
-
- shutdownAndAwaitTermination(es);
-
- // 等待5秒后,再停止第二个任务。因为第二个任务进行的是无限循环
- Thread.sleep(5000);
- System.out.println("task2 cancel: " + future2.cancel(true));
-
- // 获取第三个任务的输出,因为执行第三个任务会引起异常
- // 所以下面的语句将引起异常的抛出
- Future future3 = es.submit(task3);
- System.out.println("task3: " + future3.get());
- } catch (Exception e) {
- System.out.println(e.toString());
- }
- // 停止任务执行服务
- //es.shutdown();
-
- }
-
- private static void shutdownAndAwaitTermination(ExecutorService pool) {
- pool.shutdown(); // Disable new tasks from being submitted
- try {
- // Wait a while for existing tasks to terminate
- if (!pool.awaitTermination(10, TimeUnit.SECONDS)) {
- pool.shutdownNow(); // Cancel currently executing tasks
- // Wait a while for tasks to respond to being cancelled
- if (!pool.awaitTermination(10, TimeUnit.SECONDS))
- System.err.println("Pool did not terminate");
- }
- } catch (InterruptedException ie) {
- // (Re-)Cancel if current thread also interrupted
- pool.shutdownNow();
- // Preserve interrupt status
- Thread.currentThread().interrupt();
- }
- }
- }
2.2毒丸对象
另一种关闭生产者-消费者服务的方式就是使用“毒丸”对象,其实就是指往对象里面放一个标志对象,当得到这个对象就立即停止,这就需要在执行方法里面判断,消费者读到毒丸后就不会再执行,同样生产者提交毒丸后,就不能再提交任务。
只有生产者和消费者都已知的情况下,才可以使用“毒丸”,当生产者和消费者和数量较大时,方法变的难以使用。
直接看书中的例子,这个不是很常用,粘过来,以备用吧。
- public class IndexingService {
- private static final File POISON = new File("");
- private final IndexerThread consumer = new IndexerThread();
- private final CrawlerThread producer = new CrawlerThread();
- private final BlockingQueue<File> queue;
- private final FileFilter fileFilter;
- private final File root;
-
- class CrawlerThread extends Thread {
- class IndexerThread extends Thread {
- public void start() {
- producer.start();
- consumer.start();
- }
- /* Listing 7.18 */
- } /* Listing 7.19 */
- }
-
- public void stop() {
- producer.interrupt();
- }
-
- public void awaitTermination() throws InterruptedException {
- consumer.join();
- }
- }
3.3只执行一次的服务
如果某个方法需要处理一批任务,并且当所有任务都处理完成后才返回,那么可以通过一个私有的Executor来简化服务的生命周期,其中该Executor的生命周期由这个方法来控制。
下面程序checkMail方法能在多台主机上并行地检查新邮件,它创建一个私有的Executor,并向每台主机提交一个任务,当所有邮件任务都执行完成后,关闭并结束。
- boolean checkMail(Set<String> hosts, long timeout, TimeUnit unit)
- throws InterruptedException {
-
- ExecutorService exec = Executors.newCachedThreadPool();
- final AtomicBoolean hasNewMail = new AtomicBoolean(false);
-
- try {
- for (final String host : hosts) {
- exec.execute(new Runnable() {
-
- @Override
- public void run() {
- if (check(host))
- hasNewMail.set(true);
- }
- });
- }
- } finally {
- exec.shutdown();
- exec.awaitTermination(timeout, unit);
- }
- return hasNewMail.get();
- }
3.JVM关闭钩子
3.1关闭钩子
关闭钩子本质上是一个线程(也称为Hook线程),用来监听JVM的关闭。通过使用Runtime的addShutdownHook(Thread hook)可以向JVM注册一个关闭钩子。Hook线程在JVM 正常关闭才会执行,在强制关闭时不会执行。
对于一个JVM中注册的多个关闭钩子它们将会并发执行,所以JVM并不能保证它的执行顺行。当所有的Hook线程执行完毕后,如果此时runFinalizersOnExit为true,那么JVM将先运行终结器,然后停止。Hook线程会延迟JVM的关闭时间,这就要求在编写钩子过程中必须要尽可能的减少Hook线程的执行时间。另外由于多个钩子是并发执行的,那么很可能因为代码不当导致出现竞态条件或死锁等问题,为了避免该问题,强烈建议在一个钩子中执行一系列操作。
明白了其原理之后,也需要知道其使用场景:
1、内存管理
在某些情况下,我们需要根据当前内存的使用情况,人为的调用System.gc()
来尝试回收堆内存中失效的对象。此时就可以用到Runtime中的totalMemory()
、freeMemory()
等方法。示例如下:
- /**
- * @Author: nanJunYu
- * @Description:1、内存管理 在某些情况下,我们需要根据当前内存的使用情况,人为的调用System.gc()来尝试回收堆内存中失效的对象。
- * 此时就可以用到Runtime中的totalMemory()、freeMemory()等方法。示例如下:
- * @Date: Create in 2018/9/12 20:48
- * @params:
- * @return:
- */
- public static void autoClean() {
- Runtime runtime = Runtime.getRuntime();
- if ((runtime.totalMemory() - runtime.freeMemory()) / (double) runtime.maxMemory() > 0.90) {
- System.out.println("执行清理工作");
- } else {
- System.out.println(runtime.freeMemory());
- }
- }
2、执行命令
- class Test {
- public static void main(String args[]){
- Runtime r = Runtime.getRuntime();
- Process p = null;
- try{
- p = r.exec("notepad");
- } catch (Exception e) {
-
- }
- }
- }
注意:通过exec()
方式执行命令时,该命令在单独的进程(Process)中。
3、通过Hook实现临时文件清理
实例:
- /**
- * @Author: nanJunYu
- * @Description:通过Hook实现临时文件清理
- * @Date: Create in 2018/9/12 20:54
- * @params:
- * @return:
- */
- public void clearTemporaryFile() {
- Runtime runtime = Runtime.getRuntime();
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
- public void run() {
- System.out.println("auto clean temporary file");
- }
- }));
- }
原文地址:https://blog.csdn.net/u010199866/article/details/82668417
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 数据结构-链表
#include <stdio.h> //#incldue <malloc.h> #include <string.h> #include <stdlib.h> typedef struct Node { int data;//数据域 struct Node *pNext;//指针域 }NODE,PNODE;//NODE 等价于struct Node,PNODE等价于struct Node PNODE create_list(i…...
2024/4/24 14:16:13 - 安装vue
install vue环境检查安装vue-clivue-cli installvue-cli uninstall 环境检查(1) 检查Windows电脑是否安装了vue-cli vue -V已安装未安装安装vue-clivue需要借助node环境的,安装vue-cli之前请先安装node node -v npm -vvue-cli installnpm install -g @vue/clivue-cli uninstal…...
2024/4/24 14:16:11 - C++基础——C程序的存储空间布局
C程序的存储空间布局正文段(.text)这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其指令;程序的所有指令会存放在这个区…...
2024/5/4 0:33:43 - PAT(甲级)1069 The Black Hole of Numbers (20point(s))
题目 题目链接 思路 如果n != 6174就一直迭代,迭代过程中把每个数拆分到一个数组中进行排序,二者做差,如果相等,提前结束迭代;否则继续迭代直到 n = 6174; 注意,采用上述写法,如果一开始输入 6174 不会进入迭代,需要特判一下; 此外,为了不重复写比较函数,这里借用了…...
2024/4/15 3:19:58 - Liunx系统下读取Windows共享文件
首先在Windows系统上,解禁 Guest用户:将C盘中的文件夹abc属性中,选择共享,将Everyone的权限添加确认:在命令框中输入secpol.msc进入本地策略对话框:首先点击用户权限分配,在“拒绝从网络访问这台计算机”,把guest用户删除:点击安全选项,选择“本地账户的共享和安全模型”…...
2024/4/17 0:16:53 - Air Kiss(飞吻)技术简介,AP配网简介,airkissdebugger.apk app给智能设备通过airkiss配网过程
一、什么是 Air Kiss 技术 原文:https://iot.weixin.qq.com/wiki/doc/wifi/AirKissDoc.pdf Air Kiss 技术是一种创新性的信息传递技术。通过该技术可以便捷的向一台 与外界没有建立任何一种实质性连接(包括有线、无线、蓝牙、NFC 等)的设备传 递信息(可以是环境中 Wifi 的 ssi…...
2024/4/15 3:19:55 - Idea常用配置
最近想复习下Java基础,正好赶上重装Idea,觉得自己非常熟悉的编程环境也非常重要,所以记录此篇,意在能在下次配置Idea的时候迅速找到自己熟悉的配置 插件方面,我这边用的不多,一般也就是一下几个必要的:Translation MybatisX VisualVM Launcher Maven Helper Alibaba Java Cod…...
2024/4/29 19:50:26 - 高效能人士的七个习惯读后感与总结概括-(第四章)
锁定生命的坐标 思考一下,在你出殡的那天,你希望,身边的人对你的评价是什么? 这个可能才是你真正的人生目标(终极目标)。 1. 先构思再行动 (当然这个目标不适用于过度依赖他人的人,怕不顺从别人就会失去他的爱而产生的扭曲目标,需要靠别人来肯定自己的价值) 2.掌稳心…...
2024/4/18 17:35:02 - 三极管BJT特性曲线,原理
三极管特性曲线 晶体管三个极,与二极管不同,所以不是简单的二极管的伏安特性曲线能解决的,要分析三极管,这里只说共射电路,就分为两个端口输入和输出,分别是输入特性曲线和输出特性曲线。 输入特性曲线 输入端,基极与射极之间的电压UBE和电流IB。输入信号是UBE,UBE控制…...
2024/4/17 21:10:34 - 面试常见问题:redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案
redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案(参考多个博客)感谢有关redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案 相关的博客作者一、前言在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没…...
2024/4/15 3:19:50 - vue.js总结
vue.js总结 vue是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种…...
2024/4/15 3:19:50 - Python requests、bs4 查询地区停电信息
夏天停电实在是太烦了,供电局只会在停电之后发来一条讯息:“很抱歉。。。” 有什么用呢?为什么不提前通知我呢?这么热的天,你不热的吗? 算了,不抱怨了,自己动手吧,写一个查询的程序放服务器,这样停电前几天就可以得知信息了,然后停电的时候就提前去 蹭 蹭 蹭 蹭空调…...
2024/4/20 8:28:25 - WEB安全攻防——学习笔记一(信息收集)
简介 渗透测试之前尽可能多的收集信息,知己知彼,百战百胜。 在信息收集中最重要的就是收集服务器的配置信息和网站的敏感信息。其中包括域名及子域名信息、目标网站系统、CMS指纹、目标网站真实IP、开放的端口。 1、收集域名信息 whois查询 whois是一个标准得互联网协议,可用…...
2024/4/24 4:59:52 - DARPA_FLA项目计划-简介(转载)
作者:路住昌平 转载链接:https://www.jianshu.com/p/875afcaedf8c 项目简介 DARPA-美国国防高级研究局。 FLA-Fast lightweight autonomy 快速轻量级自主飞行计划。该研究计划于2015年启动,致力于发展全新算法,使小型无人机仅凭所搭载的高分辨摄像机、激光雷达、声呐或惯性…...
2024/4/15 3:19:46 - MICCAI2020-partI部分论文概览
MICCAI2020-partI部分论文概览1.Retinal Abnormalities Recognition Using Regional Multitask Learning任务背景:做法:2.Dual Encoding U-Net for Retinal Vessel Segmentation任务背景:做法:3.Multi-scale Microaneurysms Segmentation Using Embedding Triplet Loss任务…...
2024/4/15 3:19:54 - Python绘制疫情词云
文章目录首先从百度百科搜索到有关新冠肺炎的简介找一张灰度图像打开pycharm导包读取文本中文分词生成词云最终效果 首先从百度百科搜索到有关新冠肺炎的简介病毒: 新型冠状病毒 2019-nCoV 传染源: 野生动物,可能为中华菊头蝠 传播途径: 经呼吸道飞沫传播,亦可通过接触传播,…...
2024/4/24 14:16:08 - 微信小程序入坑教程二十一:使用wx.saveImageToPhotosAlbum保存图片时通过检测scope.writePhotosAlbum权限来提醒用户是否需要授权
摘要: 在昨天的文章《微信小程序入坑教程二十:生成海报前使用wx.downloadFile或wx.getImageInfo时潜在的坑》中提到了用户授权一事,scope.writePhotosAlbum可以检测用户有没有开启保存图片到本地的权限。当项目中使用了wx.saveImageToPhotosAlbum这个API来保存生成的海报时,…...
2024/4/24 14:16:06 - 对于MAC 发热问题解决,偶尔出现访达打不出中文,疑似ssl3/4.plist占用过多的CPU导致电脑发热严重的问题,希望对大家有帮助
MAC ssl3/4.plist占用过多的CPU导致电脑发热严重 很多使用MacBook的同学们有的过来私信我,我的Mac book发热严重怎么办? 对于MacBook电脑发热的问题,我也感同身受。一般方法,如果对于含有T2芯片的MacBook,你可以选择重置SMC,方法如下: Ⅰ、首先我们先加MacBook关机,然后…...
2024/4/24 14:16:11 - python的property属性
1、什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # ############# 定义 ############## class Foo:def fun(self):pass# 定义property属性,必须返回一个值@propertydef prop(self):return 100# ############# 调用 ################ fo…...
2024/4/24 14:16:06 - Dataset之CIFAR-10:CIFAR-10数据集简介、下载、使用方法之详细攻略
Dataset之CIFAR-10:CIFAR-10数据集简介、下载、使用方法之详细攻略安装教程以及Bug解决 本专栏主要解决计算机网络相关的问题,包括安装的图文教程,以及在安装或者运行程序过程中遇到的各种疑难bug。仅【学生身份】且【在读状态】可向博主申请免费查看资格。 Dataset之CIFAR-…...
2024/4/28 10:10:37
最新文章
- 网工内推 | 技术支持工程师,最高15k,加班有补贴
01 星网信通 招聘岗位:售前技术支持 职责描述: 1、售前技术支持:技术交流、产品选型报价、方案制作等工作; 2、招投标支持:项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…...
2024/5/10 4:06:49 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/9 21:23:04 - Golang快速入门教程(一)
目录 一、环境搭建 1.windows安装 2.linux安装 3.开发工具 二、变量定义与输入输出 1.变量定义 2.全局变量与局部变量 3.定义多个变量 4.常量定义 5.命名规范 6.输出 7.输入 三、基本数据类型 1.整数型 2.浮点型 3.字符型 4.字符串类型 转义字符 多行字符…...
2024/4/30 15:22:52 - 【ARM 嵌入式 C 文件操作系列 20 -- 文件删除函数 remove 详细介绍】
请阅读【嵌入式开发学习必备专栏 】 文章目录 文件删除函数 remove 文件删除函数 remove 在 C 语言中, 可以使用 remove 函数来删除一个文件,但在删除之前 可能想确认该文件是否存在。 可以使用 stat 函数来检查文件是否存在。 以下是如何实现这个功能…...
2024/5/10 0:12:15 - 【自学记录5】【Pytorch2.0深度学习从零开始学 王晓华】第五章 基于Pytorch卷积层的MNIST分类实战
5.1.2 PyTorch2.0中卷积函数实现详解 1、torch.nn.Conv2d in_channels3: 输入的通道数,对应图像的3个颜色通道。 out_channels10: 输出的通道数,即卷积后我们想要得到的特征图的数量。 kernel_size3: 卷积核的大小,这里使用的是3x3的卷积核…...
2024/5/9 1:27:20 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/9 15:10:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/9 7:32:17 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/9 17:11:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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