(七)Java多线程机制(知识模块较为完整)
(一)线程的基本概念
线程是一个程序内部的顺序控制流。
/*** 说明:演示同一线程内的方法调用顺序** @author huayu* @date 2019/7/6 11:40 AM*/
public class ThreadDemo {public static void main(String[] args) {method1();}public static void method1(){System.out.println("enter method1");method2();method3();}public static void method2(){System.out.println("enter method2");}public static void method3(){System.out.println("enter method3");}
}结果:
enter method1
enter method2
enter method3
事例单线程下执行过程示意图:由该示例的执行过程图可以看出就1条执行路线。
线程跟进程(静态的概念,比如机器上的class文件)的区别:
1)每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
2)线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销少。
3)多进程:在操作系统中能同时运行多个任务(程序)
4)多线程:在同一个应用程序中有多个顺序流同时执行
Java的线程通过java.lang.Thread类来实现的。
VM启动时会有一个由主方法(main(){})所定义的线程,为主线程。
可以通过创建Tread的实例来创建新的线程。
每个线程同时通过某个特定的Thread对象所对应的run()方法(在run方法里写什么语句它就执行什么语句)来完成操作的,run()方法称为线程体。
通过调用Thread类的start()方法来启动一个线程。
注:
①平时讲的进程开始执行实质上是进程里面主线程开始执行,进程是静态的概念,机器上运行的实际上都是线程。
②windows、linux、unix支持多进程多线程的,dos只支持单进程。
③在同一个时间点上,一个cpu只能支持一个线程在执行,只不过时间片执行很快,看起来像是多线程一样(非真实的多线程)。现在的机器多是多核多线程,才是真正意义上的多线程,比如四核八线程的pc机。
(二)线程的创建和启动
创建新的线程的方法:
①定义线程类实现Runnable接口,重写run()方法
/*** 说明:演示实现Runnable接口启动线程* 使用步骤:*(1)创建类实现Runnable接口*(2)重写run方法*(3)实例化一个Thread对象,并将创建的线程实例传入Thread的构造方法中*(4)启动线程* @author huayu* @date 2019/7/8 11:15 AM*/
public class RunnableDemo implements Runnable{public static void main(String[] args) {RunnableDemo runnableDemo=new RunnableDemo();//直接启动run方法//runnableDemo.run();//这边线程一起,就相当于与main方法并行了一个方法//启动线程需要调用Thread类的start()方法Thread thread=new Thread(runnableDemo);thread.start();for (int i = 0; i < 5; i++) {System.out.println("yuhua "+i);}}@Overridepublic void run() {for (int i = 0; i <5 ; i++) {System.out.println("yh "+i);}}
}启动Thread线程结果:main方法中代码不再顺序运行了,而是交替并行运行,注意两个线程分得的时间片不一定一样
yh 0
yuhua 0
yh 1
yuhua 1
yh 2
yh 3
yh 4
yuhua 2
yuhua 3
yuhua 4注释掉Thread线程,直接调用runnableDemo.run();方法结果:
yh 0
yh 1
yh 2
yh 3
yh 4
yuhua 0
yuhua 1
yuhua 2
yuhua 3
yuhua 4
两种不同的调用方式执行过程示意图:直接调用run方法跟单线程调用执行一样,通过new Thread()方法调用start方法相当于通知cpu又打开一个执行通道。
②继承Thread类重写run()方法
/*** 说明:演示继承Thread类启动线程* 使用步骤:*(1)创建线程类子类继承Thread类*(2) 重写run方法*(3)启动线程 * @author huayu* @date 2019/7/8 11:15 AM*/
public class ThreadDemo extends Thread{public static void main(String[] args) {ThreadDemo demo=new ThreadDemo();//继承Thread类就可以直接调用start方法了,不用再new Thread实例demo.start();//若直接调用run()方法效果同上例
// demo.run();for (int i = 0; i < 5; i++) {System.out.println("yuhua "+i);}}@Overridepublic void run() {for (int i = 0; i <5 ; i++) {System.out.println("yh "+i);}}
}直接start方法启动结果:
yuhua 0
yh 0
yuhua 1
yh 1
yuhua 2
yh 2
yuhua 3
yh 3
yuhua 4
yh 4不使用start方法调用run方法结果:
yh 0
yh 1
yh 2
yh 3
yh 4
yuhua 0
yuhua 1
yuhua 2
yuhua 3
yuhua 4
③实现Callable接口
/*** 说明:演示实现Callable接口启动线程* 重写call方法* java.util.concurrent.Callable是一个泛型接口* Callable接口有返回值,适用于当父线程想要获取子线程的运行结果时* 使用步骤:*(1)创建Callable子类的实例化对象*(2)创建FutureTask对象,并将Callable对象传入FutureTask的构造方法中(注意:FutureTask实现了Runnable接口和Future接口)* (3)实例化Thread对象,并在构造方法中传入FurureTask对象* (4)启动线程* @author huayu* @date 2019/7/8 11:15 AM*/
public class CallableDemo implements Callable {public static void main(String[] args) {FutureTask futureTask = new FutureTask(new CallableDemo());//new线程实例启动线程new Thread(futureTask).start();//直接调用run方法,效果与上例一样
// futureTask.run();for (int i = 0; i < 5; i++) {System.out.println("yuhua " + i);}}@Overridepublic Object call() throws Exception {for (int i = 0; i < 5; i++) {System.out.println("yh " + i);}return null;}
}结果:
yuhua 0
yh 0
yuhua 1
yh 1
yuhua 2
yuhua 3
yh 2
yh 3
yuhua 4
yh 4
④创建线程池(后续)
java通过Executors提供四种线程池:
名称 | 作用 | 简介 |
newCacheThreadPool | 创建可缓存线程池 | 如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程 |
newFixeThreadPool | 创建定长线程池 | 可控制线程最大并发数,超出的线程会在对列中等待 |
newScheduledThreadPool | 创建定长线程池 | 支持定时及周期性任务执行 |
newSingleThreadExecutor | 创建单线程化得线程池 | 只会用唯一的工作线程来执行任务,保证所有任务都按照指定顺序(FIFO,LIFO,优先级)执行。 |
通过Executors类可以创建线程池,下面以创建可缓存的线程池为例:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 说明:创建可以缓存的线程池* 使用步骤:* (1)通过类Executors来创建线程池* (2)执行创建的线程池并重写Runnable接口的run()方法* @author huayu* @date 2019/7/9 2:09 PM*/
public class NewCacheThreadPoolDemo {public static void main(String[] args) {ExecutorService es= Executors.newCachedThreadPool();for (int i = 0; i <5 ; i++) {es.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}});}}
}
运行结果:
pool-1-thread-1
pool-1-thread-3
pool-1-thread-2
pool-1-thread-4
pool-1-thread-2
注:①、②两种方法推荐使用实现Runnable接口,因为在java中类的继承是单继承的,不利于扩展,而实现接口就不用考虑这种问题,接口是可多实现的并且还可以再继承一个类。能使用接口就尽量别继承。
(三)线程的调度和优先级
(四)线程的状态控制
1)线程的基本状态
情况1(顺利完成):调用start()方法,线程进入就绪状态,通过cpu调度,线程进入运行状态 ,运行结束终止。
情况2(阻塞状态):线程在运行过程,出现某种事件打断线程的运行过程,进入阻塞状态,阻塞解除后线程又进入了就绪状态。
2)线程控制基本方法
方法 | 功能 | 位置 |
| 判断线程是否还活着(是否还未终止) | 在Thread类中 |
| 获得线程的优先级 | 在Thread类中 |
| 设置线程的优先级 | 在Thread类中 |
| 将当前线程睡眠指定毫秒数 | 在Thread类中 |
| 调用某线程的该方法,将当前线程与该线程合并,即等待该线程结束,再恢复当前线程的运行(人话是:在当前线程中利用这个方法插入运行其他线程,在插入的线程运行结束后再继续运行当前这个线程) | 在Thread类中 |
| 让出cpu,当前线程进入就绪队列等待调度 | 在Thread类中 |
| 当前线程进入对象的等待池 | 在Object类中 |
| 唤醒等待池中一个\所有等待线程 | 在Object类中 |
以上方法是基本方法,更多方法可看Thread类中的源码
(1)sleep方法演示
package test;import java.util.Date;/*** 说明:线程类(实际生产中能实现Runnable接口就尽量别继承Thread类)** @author huayu* @date 2019/11/19 10:06 PM*/
public class ThreadTest extends Thread {@Override//重写的方法不能够抛出与被重写的方法不同的异常public void run() {while (true) {System.out.println("/****"+new Date()+"****/");try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();return;}}}
}package test;/*** 说明:演示sleep方法类** @author huayu* @date 2019/11/19 10:04 PM*/
public class SleepTest {public static void main(String[] args) {ThreadTest threadTest=new ThreadTest();threadTest.start();//stop方法已被废弃掉
// threadTest.stop();try {//在哪个线程中调用Thread的sleep()方法,哪个线程就睡眠,这边在main方法中调用,则主线睡眠Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}//打断ThreadTest的睡眠状态(运行到第10秒的时候主线程睡眠结束继续执行,运行到此处threadTest线程被打断)threadTest.interrupt();}}运行结果:
/****Tue Nov 19 22:22:41 CST 2019****/
/****Tue Nov 19 22:22:42 CST 2019****/
/****Tue Nov 19 22:22:43 CST 2019****/
/****Tue Nov 19 22:22:44 CST 2019****/
/****Tue Nov 19 22:22:45 CST 2019****/
/****Tue Nov 19 22:22:46 CST 2019****/
/****Tue Nov 19 22:22:47 CST 2019****/
/****Tue Nov 19 22:22:48 CST 2019****/
/****Tue Nov 19 22:22:49 CST 2019****/
/****Tue Nov 19 22:22:50 CST 2019****/
java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at test.ThreadTest.run(ThreadTest.java:18)
(五)线程同步
情景:供销系统中有3000件A货物,A销售员在早上10点卖出2000件A货物,需要减库存到1000,于此同时B销售员同天同一时刻也卖出2000件A货物,需要减库存到1000。在更新库存的过程中,分别有线程1、线程2在同一时刻访问同一份资源,若线程间协调不一致就会出现数据前后不一致问题,为了处理在多个线程访问同一份资源时对其协调的事情可以称为线程同步。
解决以上问题可以规定在某一线程访问同一份资源时必须是独占的过程,在这一线程访问结束后其他线程才可以访问。
两个线程都访问某个类中的同一个对象结果不正确与对应解决方案演示:
/*** 测试两个线程调用访问同一份资源出现问题,及解决方案*/
public class SyncDemo implements Runnable {Timer timer=new Timer();public static void main(String[] args) {SyncDemo syncDemo=new SyncDemo();Thread thread1=new Thread(syncDemo);Thread thread2=new Thread(syncDemo);thread1.start();thread2.start();}@Overridepublic void run() {timer.add(Thread.currentThread().getName());}
}/*** 测试两个线程同时访问统一份资源辅助类* synchronized 关键字可以锁定某一东西(互斥锁)*/
public class Timer {private static int num = 0;public void add(String name) {//演示线程调用统一份资源前后不一致问题,运行结果与预想不一致
// this.falseDemo(name);//演示使用synchronized锁定代码段运行结果与预想一致
// this.syncAreaDemo(name);this.syncAreaDemo2(name);}/*** 线程调用统一份资源前后不一致问题演示** @param name*/private void falseDemo(String name) {num++;try {Thread.sleep(1L);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name + "是第" + num + "使用Timer资源的线程");}/*** 使用synchronized锁定代码段** @param name*/private void syncAreaDemo(String name) {//synchronized锁定当前对象,保证该区域代码 一个线程执行之中 不会被另一个线程打断synchronized (this) {num++;try {Thread.sleep(1L);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name + "是第" + num + "使用Timer资源的线程");}}/*** 锁定当前对象的另一种写法* 意思为方法执行过程中当前对象被锁定** @param name*/private synchronized void syncAreaDemo2(String name) {num++;try {Thread.sleep(1L);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name + "是第" + num + "使用Timer资源的线程");}
}
在java语言中,引入了对象互斥锁的概念,保证共享数据的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记保证在任一时刻,只能有一个线程访问该对象。
关键字synchronized来与对象的互斥锁联系。当某个对象synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。
synchronized关键字两种使用方式:
1 synchronized(this){//代码块}
2 放在方法声明中private synchronized void syncAreaDemo2(String name),表示整个方法为同步方法。
线程同步的几个问题:
(1)有线程使用的情况,就可能出现死锁的现象。
/*** 死锁演示* 死锁一个场景:OA与OB是A、B两个线程执行某任务完成必须调用的两个资源过程* A线程锁住了OA资源,B线程锁住了OB资源,但是可能因为某些原因导致两个线程都没释放掉对方需要的资源,导致出现死锁的情况* A线程锁定OA、OB资源则可完成任务,B线程锁住OA、OB资源则可完成任务* 该程序执行结果为:被锁死** 解决线程死锁其中一个思路就是:把锁的粒度加粗(性能要求不是很高的话可以用)*/
public class DeadLockDemo implements Runnable {public int flag=1;static Object o1=new Object(),o2=new Object();@Overridepublic void run() {if(flag==1){synchronized (o1){try {//500毫秒Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o2){System.out.println("1");}}}if(flag==0){synchronized (o2){try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o1){System.out.println("0");}}}}public static void main(String[] args) {DeadLockDemo deadLockDemo=new DeadLockDemo();DeadLockDemo deadLockDemo1=new DeadLockDemo();deadLockDemo.flag=1;deadLockDemo1.flag=0;Thread t1=new Thread(deadLockDemo);Thread t2=new Thread(deadLockDemo1);t1.start();t2.start();}
}
(2) 同一个类中,加不加同步方法抉择:
/*** 演示某个方法被锁定后,会不会影响其他未加锁的方法执行(结论 不影响)* 说明:如果结果a=1 则表示,在m1方法未执行完之前,m2方法不能执行;如果结果a=2,则代表m1方法未执行完之前,m2仍可以执行** 结论:* 1 如果同一个类中一个方法做了同步,另一个方法没有做同步,则其他的线程可以自由访问那个非同步方法,并且可能对同步的方法产生影响。* 2 如果在一个类中要是考虑保护加了同步的方法,则要仔细考虑其他的方法要不要加同步;其他方法也加同步可能影响方法执行性能,如果不加同步则可能出现数据不一致的情况。* 3 如果一个类中所有方法都加了synchronized,若一个方法执行不完,其他方法均不能执行。*/
public class LockDemo implements Runnable{int a=1;public synchronized void m1(){a=2;try {//这个值设置大一点,确保m1方法执行慢,更容易看到结果Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("m1方法调用成功,a值为"+a);}public void m2(){System.out.println("m2方法调用成功,a值为"+a);}@Overridepublic void run() {m1();}public static void main(String[] args) throws InterruptedException {LockDemo lockDemo=new LockDemo();Thread thread=new Thread(lockDemo);thread.start();Thread.sleep(1000);lockDemo.m2();}
}
(3)线程应用-消费者与生产者的问题
/*** 线程应用举例:生产者与消费者问题* 场景:某企业食堂,多个面点师生产馒头,投入一个篮子里,多个工人从篮子里拿馒头。* 生产者与消费者问题当一个线程wait后,不被notify则也会产生死锁*/
public class ThreadApplicationDemo {public static void main(String[] args) {//创建盛放容器Container container = new Container();//创建生产者访问containerProducer producer = new Producer(container);//创建消费者访问containerConsumer consumer = new Consumer(container);//模拟一个生产者一个消费者new Thread(producer).start();new Thread(consumer).start();//模拟多个生产者多个消费者(如果模拟一个就注释掉下面两行)new Thread(producer).start();new Thread(consumer).start();}}/*** 线程应用举例辅助类-工人(消费者)*/
public class Consumer implements Runnable{Container container=null;Consumer(Container container){this.container=container;}@Overridepublic void run() {//允许每个消费者吃20个馒头for (int i = 0; i < 20; i++) {eatFood();System.out.println(Thread.currentThread().getName()+"消费了第"+eatFood()+"个食物");try {//每吃完一个就休息一会儿Thread.sleep((int)(Math.random()*1000));} catch (InterruptedException e) {e.printStackTrace();}}}/*** 工人吃馒头的动作*/private Food eatFood(){return container.pop();}
}/*** 线程应用举例辅助类-面点师(生产者)*/
public class Producer implements Runnable{// 需要放东西的容器Container container=null;Producer(Container container){this.container=container;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {productFood(i);System.out.println(Thread.currentThread().getName()+"生产了第"+productFood(i)+"个食物");try {//每生产一个就休息一会儿Thread.sleep((int)(Math.random()*1000));} catch (InterruptedException e) {e.printStackTrace();}}}/*** 面点师生产馒头动作并存放*/private Food productFood(int productNum){Food food=new Food(productNum);container.push(food);return food;}
}/*** 线程应用举例辅助类-盛放实物容器类* 栈是一种先进后出的数据结构,使用该结构模拟盛放实物的容器** 知识延伸:* wait与sleep区别* 1 wait时,别的线程可以访问锁定对象(调用wait方法时,该对象必须被锁定,否则会报错);sleep时,别的线程也不可以访问锁定对象。* 2 wait方法是Object类的方法 sleep方法是Thread类的方法* 3 wait如果不被叫醒,则不再恢复,需要使用notify方法唤醒;sleep睡完设置时间就会自动被唤醒。* 4 wait方法与notify方法一般是成对出现的。*/
public class Container {//记录容器被放置的食物数量int index = 0;//使用数组结构存储食物(一个容器可以存放6个馒头)Food[] foods = new Food[6];/*** 往容器里放食物动作-需要使用synchronized锁住该方法* @param food*/public synchronized void push(Food food) {//篮子最多能装6个,需要解决容器被装满问题while(index==foods.length){try {//Object对象的wait方法,让正在访问Container对象的线程方法等待(前提是同步方法),这个方法执行后需要被唤醒,否则就一直在wait状态//wait方法不再拥有锁,sleep方法会保有锁this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//notify方法的作用是叫醒正在访问Container对象的线程,再继续生产食物
// this.notify();//如果有多个生产者则用notifyallthis.notifyAll();foods[index] = food;index++;}/*** 从容器里往外拿食物动作-需要使用synchronized锁住该方法*/public synchronized Food pop() {//解决盛放容器中没有食物的问题while (index==0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//notify方法的作用是叫醒正在访问Container对象的线程,再继续吃食物,,如果有多个消费者则用notifyall
// this.notify();//如果有多个生产者则用notifyallthis.notifyAll();index--;return foods[index];}
}/*** 线程应用举例辅助类-食品类*/
public class Food {/*** 食品id*/int id;Food(int id) {this.id = id;}public String toString(){return "food"+id;}
}
本章总结:
线程/进程的概念。
创建和启动线程的方式。
线程控制的常用方法:
sleep
join
yield
synchronized
wait
notify/notifAll
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 2022各服务器申请攻略
阿里云腾讯云华为云一直都有免费云服务器提供,企业用户个人用户可以申请的免费云服务器配置及免费时长都不同,云服务器吧来详细说下阿里云免费云服务器、腾讯云免费云服务器和华为云免费服务器申请地址、申请条件及申请攻略: 阿里云免费云服…...
2024/4/7 5:35:08 - 输出10个数中最大的
整体思路 首先定义一个数组,然后在输入时,利用for循环将这十个数放进数组。假设数组的第一个元素为最大值max,从第一个元素开始,依次与它比较。如果比max大,那么max的值更新为这个元素的值,直到循环完毕&a…...
2024/4/14 11:43:05 - Web1-Day4
一、信息收集 1.7 子域名信息收集 1.7.1 子域名检测工具 a) Layer 子域名挖掘机 b) sub Domains Brute 可爆破出三级四级甚至五级等不易被探测到的域名 网址:https://github.com/lijiejie/subDomainsBrute c) Sublist3r …...
2024/4/18 12:22:50 - 腾讯技术团队整理,为什么 Flutter 能最好地改变移动开发
这样就导致了我们不仅需要在不同的项目间尝试用不同的语言去实现同样的功能,还要承担由此带来的维护任务。如果还要继续向其他平台(比如 Web、Mac 或 Windows)拓展的话,需要付出的时间和成本将成倍增长。而这,显然是难…...
2024/4/14 11:42:55 - Unity-拓展篇-接入海康威视摄像头
1、保姆级接入教程 海康威视下载地址 1、下载好后默认安装即可 2、创建超级管理员(安装完成第一次打开):账户名密码随意填写,但是一定要记住,避免下次登录时忘记 3、点击设备管理4、记得把摄像头网线插到你的电脑上…...
2024/4/20 8:20:32 - 微信小程序开发部署发布可以在10分钟内完成
很多朋友都认为微信小程序申请、部署、发布很难,需要很长时间。 实际上,微信和腾讯云同是腾讯产品,已经提供了10分钟(根据准备资源情况,已完成小程序申请认证)完成小程序开发、部署、发布的方式。当然&…...
2024/4/14 11:43:10 - JAVA SpringBoot接科大讯飞TTS语音合成保姆式教程附源代码
JAVA SpringBoot接科大讯飞TTS语音合成 你好! 大家好~最近公司有需求需要实现语音播报的功能 然后抽空研究了下,下述代码对接的科大讯飞API实现了语音播报的效果 废话不多说上代码 package com.stla.callCenter.utility;import com.iflytek.cloud.speech.*; impor…...
2024/4/14 11:44:00 - Mysql大表数据清理方案
需求:表t_user_login_log中存储了上千条数据,我们需要对该表做数据清理,只保留近三个月的数据。 方案一 数据量<1000条时推荐使用 DELETE方法 推荐力度:极不推荐 是否会影响线上业务:严重影响 会影响线上业务&…...
2024/4/19 13:09:26 - 腾讯-抖音-小米面试官;Android-基础与底层原理,kotlin编程语言
面向对象的操作方式:SQLiteDatabase.insert(table, nullColumnHack, ContentValues); 如何导入外部数据库? 一般外部数据库文件可能放在SD卡或者res/raw或者assets目录下面。 写一个DBManager的类来管理,数据库文件搬家,先把数据…...
2024/4/28 2:56:59 - 计算机毕业设计-基于springboot的电影院会员管理系统(项目+文档+ppt)
计算机毕业设计-基于springboot的电影院会员管理系统(项目文档ppt) 1.开发环境及工具下载 开发语言:Java架构:B/S后台:SpringBoot前端:HTMLCSSJavaScript数据库:MySQL编译工具:Idea、Eclipse、MyEclipse …...
2024/4/7 5:34:59 - mysql(进阶)
mysql(进阶) 练习 mysql基础练习题 约束 主键约束:唯一标识 1、数据库的每张表只能有一个主键,不可能有多个主键。 2、所谓的一张表多个主键,我们称之为联合主键。 注:联合主键:就是用多个字段一起作为一张表的主…...
2024/4/14 11:44:00 - 宝塔面板+小鸟云服务器安全设置
前天分享了有关宝塔面板小鸟云服务器wordpress建站使用,今天主要分享下,小鸟云服务器宝塔怎么设置更安全。 宝塔设置: 1.打开宝塔的自动备份,期备份网站和数据库到OSS并且打包下载保存。这个还是比较有作用的,比如网站…...
2024/4/7 5:34:56 - 智慧杯 寻找方案
2019.6. 寻找方案 描述 Alice 在玩一个很好玩的数字游戏。这个游戏是这样的,首先有一个给定的 正整数 x,现在你可以进行下面这三种操作: 给 x 加一 给 x 减一 若 x 为 3 的倍数,则可以给 x 除以 3 现在 Alice 想让你帮帮她,找到…...
2024/4/14 11:43:55 - 数据结构--链表题一--删除链表的倒数第N个节点(leetcode-19)
题目描述: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出&#x…...
2024/4/14 11:46:37 - C语言:continue、break
continue:对1到100之间的奇数进行求和 #include <stdio.h>int main() {int i, total;for (i 1, total 0; i < 100; i){if (i % 2 0){continue;//提前结束i为偶数的这轮循环}total total i;}printf("total%d\n", total); } break #includ…...
2024/4/14 11:45:40 - 蓝桥杯每日一练:Huffuman树(哈夫曼树)
一、题目 问题描述 Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}{p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb&#x…...
2024/4/14 11:43:55 - 数据统计(python)时间序列:911分类案例、 pandas的时间序列、911的时间统计、 911的复合统计、pm2.5的统计
1.911分类案例_代码示例 import pandas as pd import numpy as np from matplotlib import pyplot as plt from matplotlib import font_manager my_font font_manager.FontProperties(fname"c:/Windows/Fonts/simkai.ttf")df pd.read_csv("./911.csv")…...
2024/4/5 4:49:40 - centos7 没有 ifconfig 命令解决办法
ifconfig是查看ip信息,Linux最小化安装没有ifconfig 方法: 1、输入ifconfig 提示不存在 2、首先确认下是否是环境变量没有ifconfig 引起。 ls /sbin/ifconfig 3、以上确定了系统是没有安装ifconfig,下面我们来安装 yum install ifconf…...
2024/4/14 11:43:40 - Vue报错:Can‘t resolve
1.vue配置路由如果出现can not resolve“src/test/demo”,那极有可能你的路径写错了,或者路径和上面的写重复了,检查路径 2.引用路径时,文件后缀.js/.vue什么的没有写全...
2024/4/14 11:44:05 - 用js写一个倒数计时器
代码如下: <body> <div><span id"hh">00</span>:<span id"mm">00</span>:<span id"ss">00</span></div> <script>window.onloadfunction(){var h0;//时var m0;//分var…...
2024/4/20 11:27:19
最新文章
- 开源博客项目Blog .NET Core源码学习(19:App.Hosting项目结构分析-7)
本文学习并分析App.Hosting项目中后台管理页面的主页面。如下图所示,开源博客项目的后台主页面采用layui预设类layui-icon-shrink-right设置样式,点击主页面中的菜单,其它页面采用弹框或者子页面形式显示在主页面的内容区域。 后台主页面…...
2024/4/28 6:20:36 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 面试经典算法系列之双指针1 -- 合并两个有序数组
面试经典算法题1 – 合并两个有序数组 LeetCode.88 公众号:阿Q技术站 问题描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#…...
2024/4/27 20:48:48 - Kafka入门到实战-第五弹
Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…...
2024/4/26 16:59:59 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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