第二十六章

一、多线程

1.1 并发与并行的概念

并发:指两个或多个事件在同一时间段内发生。
并行:指两个或多个事件在同一时刻发生(同时发生)。

在这里插入图片描述

1.2 进程的概念

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程,
在这里插入图片描述

1.3 线程的概念

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为,多线程程序。

一个程序运行后至少有一个进程,一个进程可以包含多个线程
在这里插入图片描述

1.3 线程调度

  • 分时调度:

     所有线程轮流使用CPU的使用权,平均分配每个线程栈中的CPU的时间
    
  • 抢占式调度:
    优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

1.4 主线程

/*主线程:执行(main)方法的线程单线程程序:java程序中只有一个线程执行从main方法开始,从上到下依次执行JVM会找操作系统开辟一条通向CPU的执行路径,cpu就可以通过这个路径来执行main方法而这个路径有一个名字叫做 main(主)线程*/
public class Demo01MainThread {public static void main(String[] args) {Person p1 = new Person("小强");p1.run();//主线程中间出现错误会导致之后程序无法执行// System.out.println(0/0);//ArithmeticException: / by zeroPerson p2 = new Person("旺财");p2.run();}
}

1.5 创建多线程程序的第一种方式:创建Thread类的子类

Java.lang.Thread
创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。

创建多线程程序的第一种方式: 创建Thread类的子类

java.lang.Thread类:是描述线程的类,我们想要实现多线程的程序,就必须继承Thread类

实现步骤:

 1.创建一个Thread类的子类2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么) **void run()**  是Thread类中的一个方法 3.创建Thread类的子类对象4.调用Thread类中的方法start方法,开启新的线程,执行run方法void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。结果是两个线程并发的运行;当前线程(main线程)和另一个线程(创建的新线程,执行其run方法)多次启动一个线程是非法的,特别是当线程已经结束执行后,不能再重新启动。java程序属于抢占式调度,那个线程优先级高哪个线程优先执行;同一个优先级那就随机选择一个执行
public class Demo02Thread {public static void main(String[] args) {
// 3.创建Thread类的子类对象MyThread mt = new MyThread();// 4.调用Thread类中的方法start方法,开启新的线程,执行run方法mt.start();for (int i = 0; i < 20; i++) {System.out.println("main" + i);}}
}

Thread子类

 //1.创建一个Thread类的子类 
public class MyThread  extends Thread{//2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么)@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println("run" + i);}}
}

1.6 多线程原理–随机性打印结果

在这里插入图片描述

1.6 多线程原理–多线程内存图解

在这里插入图片描述

1.7 Thread类的常用方法——获取线程名称的方法

获取线程名称的两种方式:

        1.使用Thread类中的getName()方法:String getName()返回线程名称2.可以先获取当前正在执行的线程,使用线程中的方法getName()获取线程名称static Thread currentThread() 返回对当前正在执行的线程对象的引用。线程的名称:主线程:main新线程:Thread-0,Thread-1,Thread-2
public class Demo03MyThreadMain {public static void main(String[] args) {MyThreadZi mt = new MyThreadZi();//调用start方法开启新线程,执行run方法mt.start();//Thread-0new MyThreadZi().start();new MyThreadZi().start();//获取主线程名称System.out.println(Thread.currentThread().getName());}}

子类

//定义一个Thread子类
public class MyThreadZi extends Thread {//重写Thread类中的run方法。设置线程任务@Overridepublic void run() {//获取线程名称//String name = getName();//System.out.println(name);//获取当前执行的线程,由于currentThread()是静态方法,直接由Thread类调用即可,不需要对象// Thread t = Thread.currentThread();//System.out.println(t);//String name = t.getName();//System.out.println(name);//写成一句,链式编程System.out.println(Thread.currentThread().getName());}}

1.8 Thread类的常用方法——设置线程名称的方法

设置线程的名称(了解):

        1.使用Thread类中的方法setName(名字);void setName(String name)    改变线程名称,使之与参数 name 相同2.创建一个带参数的构造方法,参数传递线程的名称;调用父类的带参构造方法,把线程名称传递给父类,让父类(Thread)给子线程起一个名字Thread(String name) 分配新的Thread对象
public class Demo04TreadSet {public static void main(String[] args) {//开启多线程ThreadSetName mt = new ThreadSetName();mt.setName("小强");mt.start();//开启多线程new ThreadSetName("旺财").start();}
}

1.9 Thread类的常用方法——sleep

static void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
毫秒数结束后,线程继续进行
public class Demo05Sleep {public static void main(String[] args) {//模拟秒表for (int i = 0; i <= 60; i++) {System.out.println(i);//使用Thread类的sleep方法让程序睡眠1秒钟,结果一秒打印一次//JAVA里的Thread.sleep方法一定有异常 所以用sleep方法要用try...catchtry {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

1.10 创建多线程程序的第二种方式:实现Runnable接口

创建线程的另一种方法是

声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。

创建多线程程序的第二种方式:实现Runnable接口

 Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
java.lang.Thread类的构造方法Thread(Runnable target) 分配新的Thread 对象Thread(Runnable target,String name) 分配新的Thread对象。

实现步骤:

1.创建一个Runnable接口的实现类
2.在实现类中重写Runnable接口的run方法,设置线程任务
3.创建一个Runnable接口的实现类对象
4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
5.调用Thread类中的start方法,开启新的线程执行run方法

public class Demo01Runnable {public static void main(String[] args) {//3.创建一个Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();// 4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象Thread t = new Thread(run);//构造方法中传递//5.调用Thread类中的start方法,开启新的线程执行run方法t.start();for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}
}

实现类

//  1.创建一个Runnable接口的实现类
public class RunnableImpl implements Runnable {//2.在实现类中重写Runnable接口的run方法,设置线程任务@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}
}

1.11 Runnable和Thread的区别

实现Runnable接口创建多线程程序的好处:

1.避免了单继承的局限性
一个类只能继承一个类,类继承了Thread类就不能继承其他的类
实现了Runnable接口,还可以继承其他的类,实现其他的接口
2.增强了程序的扩展性,降低了程序的耦合性(解耦)
实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离(解耦)
实现类中,重写了run方法:用来设置线程任务
创建Thread类对象,调用start方法:用来开启新线程

public class Demo01Runnable {public static void main(String[] args) {//3.创建一个Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();// 4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象// Thread t = new Thread(run);//打印线程名称Thread t = new Thread(new RunnableImpl2());//打印HelloWorld,使用接口可随意调换//5.调用Thread类中的start方法,开启新的线程执行run方法t.start();for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}
}

实现类

//  1.创建一个Runnable接口的实现类
public class RunnableImpl implements Runnable {//2.在实现类中重写Runnable接口的run方法,设置线程任务@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName()+"-->"+i);}}
}

实现类2

//  1.创建一个Runnable接口的实现类
public class RunnableImpl2 implements Runnable {//2.在实现类中重写Runnable接口的run方法,设置线程任务@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println("Hello World!");}}
}

1.12 匿名内部类方式实现线程的创建

匿名内部类方式实现线程的创建
匿名:没有名字
内部类:写在其他类内部的类匿名内部类作用:简化代码把子类继承父类,重写父类方法,创建子类对象合一步完成
匿名内部类最终产物:子类/实现对象,而这个类没有名字
格式:new 父类/接口(){重写父类/接口中的方法};
public class Demo01InnerClassThread {public static void main(String[] args) {//线程的父类是Thread//不用匿名内部类,需要创建new MyThread.()start();来启动线程//使用匿名内部类new Thread() {//重写run方法@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName() + "-->" + "A");}}}.start();//开启多线程//线程的接口Runnable// RunnableImpl r = new RunnableImpl()Runnable r = new RunnableImpl() {//多态//重写run方法,设置线程任务@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName() + "-->" + "B");}}};new Thread(r).start();//简化接口的方式,直接接收实现类对象,不用变量new Thread(new RunnableImpl() {//多态//重写run方法,设置线程任务@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println(Thread.currentThread().getName() + "-->" + "C");}}}).start();}}

二、线程安全

2.1 线程安全问题的概述

在这里插入图片描述

/*实现卖票案例:多个线程访问共享数据,会出现卖同一张票以及卖不存在票的情况
Thread-2-->正在卖第100张票
Thread-1-->正在卖第100张票
Thread-0-->正在卖第100张票*/
public class RunnableImpl implements Runnable{//定义一个多个线程共享的票源private  int ticket = 100;//设置线程任务@Overridepublic void run() {//使用死循环让卖票重复进行while (true) {//先判断票是否存在if (ticket > 0) {//提高安全问题出现的概率,让程序睡眠try{Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}//票存在,卖票 ticketSystem.out.println(Thread.currentThread().getName() + "-->正在卖第" + ticket + "张票");ticket--;}}}
}
/*模拟卖票案例创建三个线程,同时开启,对共享的票进行出售*/
public class Demo01Ticket {public static void main(String[] args) {//创建Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();//创建Thread对象,构造方法中传递Runnable接口的实现类对象Thread t0 = new Thread(run);Thread t1 = new Thread(run);Thread t2 = new Thread(run);//调用方法开启多线程t0.start();t1.start();t2.start();}
}

2.2 线程安全问题产生的原理

进入if语句是指已经判断完ticket的值大于零,但是没有执行打印和ticket–,然后cpu转去执行其他的线程。导致其他的线程传入的值跟前边传入的值是i相同的。
在这里插入图片描述

2.3 解决线程安全问题–线程同步

线程同步:

  1. 同步代码块
  2. 同步方法
  3. 锁机制

2.4 解决线程安全问题–同步代码块

synchronized关键字可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问
格式:

synchronized(同步锁){需要同步的代码
}

/*模拟卖票案例创建三个线程,同时开启,对共享的票进行出售*/
public class Demo01Ticket {public static void main(String[] args) {//创建Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();//创建Thread对象,构造方法中传递Runnable接口的实现类对象Thread t0 = new Thread(run);Thread t1 = new Thread(run);Thread t2 = new Thread(run);//调用方法开启多线程t0.start();t1.start();t2.start();}
}
import java.util.Objects;/*卖票案例出现了线程安全问题卖出了不存在的票和重复的票解决线程安全问题的一种方案:使用同步代码块格式:synchronized(锁对象){可能会出现线程安全问题的代码(访问了共享数据的代码)}注意:1.通过代码块中的锁对象,可以使用任意的对象2.但是必须保证多个线程使用的锁对象是同一个3.锁对象的作用:把同步代码块锁住,只让一个线程在同步代码块中执行*/
public class RunnableImpl implements Runnable{//定义一个多个线程共享的票源private  int ticket = 100;//创建一个锁对象,写在线程外边。Object obj = new Object();//设置线程任务@Overridepublic void run() {//使用死循环让卖票重复进行while (true) {synchronized (obj){//先判断票是否存在if (ticket > 0) {//提高安全问题出现的概率,让程序睡眠try{Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}//票存在,卖票 ticketSystem.out.println(Thread.currentThread().getName() + "-->正在卖第" + ticket + "张票");ticket--;}}}}
}

2.5 同步技术的原理

在这里插入图片描述

2.6 解决线程安全问题—同步方法

**同步方法:**使用sychronized修饰的方法就叫做同步方法,保证A线程执行该方法的时候其他方法只能在线程外等着

pubic sychronized void method(){可能会产生安全问题的代码
}

对于非static方法,同步锁就是this
对于static方法,我们使用当前方法所在类的字节码对象(类名.class)

/*模拟卖票案例创建三个线程,同时开启,对共享的票进行出售*/
public class Demo01Ticket {public static void main(String[] args) {//创建Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();System.out.println("run" + run);//创建Thread对象,构造方法中传递Runnable接口的实现类对象Thread t0 = new Thread(run);Thread t1 = new Thread(run);Thread t2 = new Thread(run);//调用方法开启多线程t0.start();t1.start();t2.start();}
}
/*实现卖票案例:解决线程安全问题的第二种方案,使用同步方法使用步骤:1.把访问了共享数据的代码抽取出来,放入一个方法中2.在方法上添加synchronized修饰符格式:synchronized 返回值类型 方法名(参数列表){可能会出现线程安全问题的代码(访问了共享数据的代码)}*/
public class RunnableImpl implements Runnable{//定义一个多个线程共享的票源private  int ticket = 100;//设置线程任务@Overridepublic void run() {System.out.println("this" + this);//使用死循环让卖票重复进行while (true) {payTicket();}}/*定义一个同步方法同步方法会吧方法内部的代码所著只让一个线程执行,同步方法的锁对象是谁就是实现类对象   new RunnableImpl(),也就是this*/public synchronized void payTicket(){//先判断票是否存在if (ticket > 0) {//提高安全问题出现的概率,让程序睡眠try{Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}//票存在,卖票 ticketSystem.out.println(Thread.currentThread().getName() + "-->正在卖第" + ticket + "张票");ticket--;}}
}

2.7 静态同步方法(了解)

public class RunnableImpl implements Runnable{//定义一个多个线程共享的票源private static   int ticket = 100;//设置线程任务@Overridepublic void run() {System.out.println("this" + this);//使用死循环让卖票重复进行while (true) {payTicketStatic();}}/*静态的同步方法锁对象:不能是this,this是创建对象之后产生的,静态方法优先于对象静态方法的锁对象是本类的class属性-->class文件对象(反射)*/public static synchronized void payTicketStatic(){//先判断票是否存在//   synchronized (RunnableImpl.class) {  在静态方法中 传入RunnableImpl.class也可以 不能用thisif (ticket > 0) {//方法是静态的,必须访问静态变量//提高安全问题出现的概率,让程序睡眠try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}//票存在,卖票 ticketSystem.out.println(Thread.currentThread().getName() + "-->正在卖第" + ticket + "张票");ticket--;}//}}
}
public class Demo01Ticket {public static void main(String[] args) {//创建Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();System.out.println("run" + run);//创建Thread对象,构造方法中传递Runnable接口的实现类对象Thread t0 = new Thread(run);Thread t1 = new Thread(run);Thread t2 = new Thread(run);//调用方法开启多线程t0.start();t1.start();t2.start();}
}

2.8 解决线程安全问题第三种方式—Lock锁

/*实现卖票案例:解决线程安全问题的第三种方案,使用Lock锁java.util.current.Locks.Lock接口Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作Lock接口中的方法:void lock()获取锁。void unlock() 释放锁。Lock 是一个接口 需要一个实现类 ---ReentrantLockjava.util.concurrent.locks.ReentrantLock implements Lock接口使用步骤:1.在成员位置创建一个Lock的实现类对象2.在可能会出现安全问题的代码前,调用Lock接口中的方法Lock获取锁3.在可能会出现安全问题的代码后,调用Lock接口中的方法UnLock解锁*/
public class RunnableImpl implements Runnable{//定义一个多个线程共享的票源private  int ticket = 100;// 1.在成员位置创建一个Lock的实现类对象Lock l = new ReentrantLock();//多态写法//设置线程任务,优化写法@Overridepublic void run() {//使用死循环让卖票重复进行while (true) {//   2.在可能会出现安全问题的代码前,调用Lock接口中的方法Lock获取锁l.lock();//先判断票是否存在if (ticket > 0) {//提高安全问题出现的概率,让程序睡眠try{//票存在,卖票 ticketSystem.out.println(Thread.currentThread().getName() + "-->正在卖第" + ticket + "张票");ticket--;Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}finally {//  3.在可能会出现安全问题的代码后,调用Lock接口中的方法UnLock解锁l.unlock();//无论程序是否异常都会把锁释放}}}}/*  //设置线程任务@Overridepublic void run() {//使用死循环让卖票重复进行while (true) {//   2.在可能会出现安全问题的代码前,调用Lock接口中的方法Lock获取锁l.lock();//先判断票是否存在if (ticket > 0) {//提高安全问题出现的概率,让程序睡眠try{Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}//票存在,卖票 ticketSystem.out.println(Thread.currentThread().getName() + "-->正在卖第" + ticket + "张票");ticket--;}//  3.在可能会出现安全问题的代码后,调用Lock接口中的方法UnLock解锁l.unlock();}}*/
}
/*模拟卖票案例创建三个线程,同时开启,对共享的票进行出售*/
public class Demo01Ticket {public static void main(String[] args) {//创建Runnable接口的实现类对象RunnableImpl run = new RunnableImpl();//创建Thread对象,构造方法中传递Runnable接口的实现类对象Thread t0 = new Thread(run);Thread t1 = new Thread(run);Thread t2 = new Thread(run);//调用方法开启多线程t0.start();t1.start();t2.start();}
}

三、线程状态

3.1 线程状态概述

NEW:
至今尚未启动的线程处于这种状态。
RUNNABLE:
正在 Java 虚拟机中执行的线程处于这种状态。
BLOCKED:
受阻塞并等待某个监视器锁的线程处于这种状态。
WAITING:
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
TIMED_WAITING:
等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
TERMINATED:
已退出的线程处于这种状态。
在这里插入图片描述

3.1.1 线程间通信

通信:多个线程在处理同一个资源,但是处理的动作确不相同。
多个线程在操作同一份数据时,为了避免争夺,各个线程有效利用资源,使用等待唤醒机制。

3.2 等待唤醒机制

在这里插入图片描述
在这里插入图片描述

3.2.1 等待唤醒机制需求分析

在这里插入图片描述

3.2.2 等待唤醒机制代码实现–包子类,包子铺类

测试类

/*测试类:包含main方法,程序的执行入口,启动程序创建包子对象创建包子铺线程,开启,生产包子创建吃货线程,开启,吃包子*/
public class Demo {public static void main(String[] args) {//创建包子对象BaoZi bz = new BaoZi();//创建包子铺线程,开启,生产包子new BaoZiPu(bz).start();//创建吃货线程,开启,吃包子new ChiHuo(bz).start();}
}

包子类

/*资源类:包子类设置包子的属性皮馅包子的状态: 有 truefalse*/
public class BaoZi {String pi;String Xian;// 包子的状态: 初始falseBoolean flag = false;}

吃货类:线程类

*消费者(吃货):是一个线程类,可以继承Thread设置线程任务(run):吃包子对包子的状态进行判断false:没有包子吃货调用wait方法进入等待状态true:有包子吃货吃包子吃货吃完包子修改包子状态为false吃货唤醒包子铺的线程,生产包子*/
public class ChiHuo extends Thread{//1.需要在成员位置创建一个包子变量private BaoZi bz;//2.使用带参数的构造方法,为这个包子变量赋值public ChiHuo(BaoZi bz) {this.bz = bz;}//设置线程任务(run):吃包子@Overridepublic void run() {//使用死循环,让吃货一直吃包子while(true){//必须同时同步技术保证两个线程只能有一个在执行synchronized (bz){//对包子状态进行判断if (bz.flag == false){try {bz.wait();} catch (InterruptedException e) {e.printStackTrace();}}//被唤醒之后的代码System.out.println("吃货正在吃:"+ bz.pi + bz.Xian + "的包子,2秒吃完");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}//吃货吃完包子,修改包子的状态为falsebz.flag = false;bz.notify();System.out.println("吃货已经把"+ bz.pi + bz.Xian +"的包子吃完了,包子铺开始生产包子了");System.out.println("--------------------------------------");}}}
}

包子铺:线程类


/*生产者(包子铺)类:是一个线程类,可以继承Thread设置线程任务(run):生产包子对包子的状态进行判断true:有包子包子铺调用wait方法进入等待状态false:没有包子包子铺生产包子增加一些趣味性:交替生产两种包子有两种状态:(i % 2 == 0)包子铺生产好了包子修改包子的状态为true有唤醒吃货线程,让吃货线程吃包子注意事项:包子铺线程和包子线程关系--通信关系(互斥)必须使用同步技术保证两个线程只能有一个在执行锁对象必须保证唯一,可以使用包子对象作为锁对象包子铺类和吃货的类就需要把包子对象作为参数传递进来1.需要在成员位置创建一个包子变量2.使用带参构造方法,为这个包子变量赋值*/
public class BaoZiPu extends Thread{//1.需要在成员位置创建一个包子变量private BaoZi bz;//2.使用带参数的构造方法,为这个包子变量赋值public BaoZiPu(BaoZi bz) {this.bz = bz;}//设置线程任务,生产包子@Overridepublic void run() {while(true){//让包子铺一直生产包子//定义一个变量int count = 0;//  必须使用同步技术保证两个线程只能有一个在执行synchronized (bz) {if (bz.flag == true) {//包子铺调用wait方法进入等待状态try {bz.wait();} catch (InterruptedException e) {e.printStackTrace();}}//唤醒之后执行,包子铺生产包子if (count % 2 == 0) {//生产薄皮三鲜馅包子bz.pi = "薄皮";bz.Xian = "三鲜馅";} else {//生产冰皮,牛肉大葱馅bz.pi = "冰皮";bz.Xian = "牛肉大葱馅";}count++;//每次生产不同的包子System.out.println("包子铺正在生产" + bz.pi + bz.Xian + "包子");//生产包子需要3秒try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}//包子铺生产好了包子  修改包子的状态为true有bz.flag = true;//唤醒吃货线程,让吃货线程吃包子bz.notify();System.out.println("包子铺已经生产好了" + bz.pi + bz.Xian + "包子,可以吃了");}}}
}

3.3 等待唤醒案例分析

计时等待
在这里插入图片描述
Block阻塞状态
在这里插入图片描述
Waiting(无限等待状态)
等待唤醒 线程之间的通信
在这里插入图片描述

3.4 等待唤醒案例代码实现

等待唤醒案例:线程之间的通信

      创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用wait()方法,放弃cup的执行进入waiting状态(无限等待)创建一个老板线程(生产者):花了五秒做包子,做好包子之后,调用notify方法,唤醒顾客吃包子注意:顾客和老板线程必须使用同步代码块包裹起来,保证等待和唤醒,只能有一个执行同步使用的锁对象必须保证是唯一的。只有锁对象才能调用wait和notify方法
Object类:void wait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。void notify()唤醒在此对象监视器上等待的单个线程。 会继续执行wait之后的代码
public class Demo01WaitAndNotify {public static void main(String[] args) {//创建锁对象,保证线程唯一Object obj = new Object();//创建一个顾客线程(消费者) 匿名内部类创建new Thread(){@Overridepublic void run() {//保证等待和唤醒的线程只能有一个执行,需要使用同步技术synchronized (obj){System.out.println("告知老板要的包子的种类和数量");//调用wait()方法,进入等待状态try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}//唤醒之后执行的代码System.out.println("包子已经做好了,开吃");}}}.start();//创建一个老板线程:new Thread(){@Overridepublic void run() {//花五秒钟做包子try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (obj){System.out.println("五秒之后包子做好了,告诉顾客可以吃了");//  做好包子之后,调用notify方法,唤醒顾客吃包子obj.notify();}}}.start();}
}
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. mongoose验证

    在创建集合时可以设置当前字段的验证规则,不符合规则就插入失败required:true -----必选字段 minlength:3 ------字符串最小长度不能小于3 maxlength:5 -------字符串最大长度不能大于5 min:2 ------最小数值不能小于2 mx:5 -----最大数值不能大于5 enum:[‘aaaa’…...

    2024/4/17 19:13:46
  2. 第一天写博

    希望以后可以坚持写一下博客~...

    2024/4/15 3:46:15
  3. EM 算法理解

    EM 算法是一种迭代算法,1977 年由 Dempster 等人总结提出,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM 算法的每次迭代由两步组成:E 步,求期望(expectation);M 步,求极大(maximization)。所以这一算法称为期望极大算法(…...

    2024/4/19 1:47:04
  4. node如何批量上向数据库中多个表同时插入多条数据

    背景 简单分析下问题: 1、同时向多个表。 2、同时插入多条。 解决方法 1、多个 insert 中间以分号隔开insert into culturesource_tab (sourceid) values (“1”); insert into culturesource_tab (sourceid) values (“1”)2、同时并列插入多个values值insert into c…...

    2024/4/15 3:45:53
  5. idea没有target文件夹怎么办?

    参考链接:https://blog.csdn.net/weixin_39086483/article/details/95051503...

    2024/4/15 3:45:52
  6. 【sklearn机器学习】KNN分类

    sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=None, **kwargs)...

    2024/4/15 3:45:51
  7. LeetCode移掉k位数字(贪心算法)python

    描述 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 num的长度小于10002,且将≥k。给定的num不包含任何前导零。 您在真实的面试中是否遇到过这个题? 样例 Example 1: Input: num = “1432219”, k = 3 Output: “1219” Example 2: I…...

    2024/4/15 3:45:50
  8. 【JS函数进阶】递归和堆栈

    递归 首先什么是递归? 函数在解决某些问题的时候,需要调用其他的函数或者是其本身,那么对于调用其本身的情况,就可以叫做递归。 实现简单函数:x的n次方 第一种使用for 循环,也是初学者容易想到的方法;那么用递归怎么实现呢? function pow(x,n){ if (n==1){ return x}el…...

    2024/4/15 3:45:29
  9. leetcode 393.UTF-8编码验证

    原题如下 https://leetcode-cn.com/problems/utf-8-validation/题解 方法一 本题的一个理解上的误区那就是,做题者误认为只有长度为1到4的数组才能是正确的,也就是默认数组中只包含了一组UTF-8的编码,其实不是这样的,本题是可以包含很多组编码的。 题目描述中介绍了四种长度…...

    2024/4/15 3:45:28
  10. Leetcode 127. 单词接龙 C++

    Leetcode 127. 单词接龙 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。 说明:如果不存在这样的转换序列,返回 0。 所…...

    2024/4/20 14:35:50
  11. 【ERP】

    ...

    2024/4/15 3:45:26
  12. 冒泡排序_《羊卓的杨的算法笔记》_Quentin

    冒泡排序 冒泡排序是什么?每次从开头比较相邻的两个元素,如果后面的数比前面的数大那就交换两数。(升序) 因为一些元素慢慢被换到最后,就像是在冒泡,也就称为冒泡排序了。 冒泡排序的复杂度:O(n^2)。每次遍历要进行n-1次比较,这样的比较要进行n-1次,所以时间复杂度就…...

    2024/4/19 12:27:33
  13. 遇到This application failed to start because no Qt platform plugin could be initialized.

    在WIN 10 x64下安装PyQt5,找到C:\Users\Administrator\AppData\Local\Programs\Python\Python35\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe运行,提示This application failed to start because no Qt platform plugin could be initialized. Reinstalling the appl…...

    2024/4/15 3:45:24
  14. 笔记Day03-1 图的绘制 matplotlib

    折线图import pandas as pd import matplotlib.pyplot as plt unrate=pd.read_csv("E:/唐宇迪数据集/unrate.csv") unrate[DATE]=pd.to_datetime(unrate[DATE]) first_twelve=unrate[0:12] plt.plot(first_twelve[DATE],first_twelve[VALUE]) plt.show()import pand…...

    2024/4/15 3:45:23
  15. PAT (Advanced Level) Practice

    1002 A+B for Polynomials (25分)题目自行查看浙大PTA 甲级(English)1002 题目为简单模拟,难度不大,此处提供两种思路,编译器是g++ 6.5.0,C++编译器,头文件包含cstdio(不推荐写stdio.h) 个人擅长用C解题,过程中习惯用scanf和printf而不是cin 和 cout(速度上前两者快得多)题解1…...

    2024/4/15 3:45:22
  16. MetaPAD: 从大量文本语料库中发现元模式

    MetaPAD: Meta Pattern Discovery from Massive Text Corpora 背景 本文来自公子开明的博客 传统的文本序列挖掘方法已经公开了大量的序列集合,但是很少有方法能够提取出具有语义类型的任意序列。 Hearst patterns使用诸如“NP such as NP, NP, and NP”挖掘上下为关系;TextRu…...

    2024/4/15 3:45:21
  17. 2020-06-18提问

    一、什么是原型? 1、每一个由构造函数创建出来的对象,都会默认的和构造函数的原型关联; 2、当使用一个方法进行属性或者方法访问的时候,会先在当前对象内查找该属性和方法,如果当前对象内未找到,就会去跟它关联的原型对象内进行查找; 3、也就是说,在原型中定义的方法跟…...

    2024/4/15 3:36:10
  18. 面向对象和封装

    面向对象和封装 面向对象 概念: 1.面向过程:实现一个功能,每一个具体的步骤都要亲历亲为,详细处理每一个细节。 2.面向对象:实现一个功能,不关心具体的步骤,而是找一个具有该功能的人,去帮我做事儿。 代码实现: package cn.itcast.day06.demo01;import java.util.Arra…...

    2024/4/17 19:14:47
  19. 【Spring框架】Spring的AOP介绍

    Spring的AOP介绍 AOP(全称Aspect Oriented Programming) 即:面向切面编程。 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度…...

    2024/4/15 3:36:07
  20. 【函数相关写法整合(非理论)】普通函数、匿名函数、自执行函数、封闭空间、闭包、闭包试题

    文章目录普通函数匿名函数【IIFE】立即执行函数/封闭函数(特点:匿名/自执行/一次性)【歧义】自执行函数【歧义】封闭空间闭包(函数嵌套函数)闭包试题普通函数函数声明function fnA() {var a = a;console.log(a); } //需要时调用 fnA(); // a fnA(); // a函数表达式var fnB…...

    2024/4/15 3:36:06

最新文章

  1. Java获取文件路径

    第一种&#xff1a; File f new File(this.getClass().getResource("/").getPath()); System.out.println(f);结果: C:\Users\xiaob\javasrc\project\request-pro\target\classes 获取当前类的所在工程路径; 如果不加“/” File f new File(this.getClass().getR…...

    2024/4/20 21:16:10
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 【超简单】基于PaddleSpeech搭建个人语音听写服务

    一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…...

    2024/4/16 12:32:02
  4. FreeRTOS学习 -- 再识

    工作中一直使用FreeRTOS进行着开发&#xff0c;但是没有进行过系统的总结过。现在将快速使用几天时间将FreeRTOS相关知识点加以总结。 官网&#xff1a; https://www.freertos.org/zh-cn-cmn-s/ 参看资料&#xff1a; 正点原子 STM32F1 FreeRTOS开发手册_V1.2.pdf The FreeRTOS…...

    2024/4/17 16:10:50
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/19 14:24:02
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

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

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

    2024/4/19 11:57:31
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/19 11:57:31
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

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

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

    2024/4/19 11:58:14
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

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

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

    2024/4/20 7:40:48
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/4/19 11:58:39
  15. 【外汇早评】美伊僵持,风险情绪继续升温

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

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

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

    2024/4/20 3:12:02
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/19 11:59:15
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

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

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

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

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

    2024/4/19 11:59:48
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/19 12:00:06
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/20 21:12:02
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/19 12:00:25
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/19 12:00:40
  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