精华内容
下载资源
问答
  • 什么是假唤醒? 当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用功 比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了 但是只能一个人买...

    那什么是假唤醒?

    • 当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用功
    • 比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了
    • 但是只能一个人买,所以其他人都是假唤醒,获取不到对象的锁

    避免虚假唤醒

    下面是避免虚假唤醒的示例:

    package duoxiancheng.bao;
    
    /*
     * 虚假唤醒的解决:
     *  wait要始终保证在while循环当中。
     */
    public class LockTest {
        public static void main(String[] args) {
            Clerk clerk = new Clerk();
            Producter producter = new Producter(clerk);
            Customer customer = new Customer(clerk);
    
            new Thread(producter,"生产者A").start();
            new Thread(customer,"消费者A").start();
            new Thread(producter,"生产者B").start();
            new Thread(customer,"消费者B").start();
        }
    }
    
    // 售货员
    class Clerk {
        private int product = 0;
    
        // 进货
        public synchronized void add() {
            // 产品已满
            while (product >=1) {
                System.out.println(Thread.currentThread().getName() + ": " + "已满!");
                try {
                    this.wait();
                } catch (InterruptedException e) {
                }
            }
            ++product;
            // 该线程从while中出来的时候,是满足条件的
            System.out.println(Thread.currentThread().getName() + ": " +"....................进货成功,剩下"+product);
            this.notifyAll();
        }
    
        // 卖货
        public synchronized void sale() {
            while (product <=0) {
                System.out.println(Thread.currentThread().getName() + ": " + "没有买到货");
                try {
                    this.wait();
                } catch (InterruptedException e) {
                }
            }
            --product;
            System.out.println(Thread.currentThread().getName() + ":买到了货物,剩下 " + product);
            this.notifyAll();
        }
    }
    
    // 生产者
    class Producter implements Runnable {
        private Clerk clerk;
    
        public Producter(Clerk clerk) {
            this.clerk = clerk;
        }
    
        // 进货
        @Override
        public void run() {
            for(int i = 0; i < 20; ++i) {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                }
                clerk.add();
            }
        }
    }
    
    // 消费者
    class Customer implements Runnable {
        private Clerk clerk;
        public Customer(Clerk clerk) {
            this.clerk = clerk;
        }
    
        // 买货
        @Override
        public void run() {
            for(int i = 0; i < 20; ++i) {
                clerk.sale();
            }
        }
    }
    

    怎么产生虚假唤醒

    把 while (product >=1) {}
    换成 if (product >=1) {}
    就会出现虚假唤醒

    为什么 if会出现虚假唤醒

    因为if只会执行一次,执行完会接着向下执行if()外边的
    而while不会,直到条件满足才会向下执行while()外边的

    if块中使用wait方法,是非常危险的,因为一旦线程被唤醒,并得到锁,就不会再判断if条件,而执行if语句块外的代码,所以建议,凡是先要做条件判断,再wait的地方,都使用while循环来做。

    展开全文
  • 对于固定次数的情况下的循环 for 循环更加的好用 而对于不固定次数,或者次数不明的情况则使用 while 循环更加的方便。

    对于固定次数的情况下的循环 for 循环更加的好用

    而对于不固定次数,或者次数不明的情况则使用 while 循环更加的方便。

    展开全文
  • php do while用法详解

    2021-04-21 14:06:20
    php do while是一种循环语句,该循环语句保证会执行一次,其使用语法如

    php do while是一种循环语句,该循环语句保证会执行一次,其使用语法如【<?php $i = 0;do {echo $i;} while ($i > 0);?>】,其循环语句将正好运行一次。

    7804c826a5b9822955ff529dcd229b41.png

    推荐:《PHP视频教程》

    do-while

    (PHP 4, PHP 5, PHP 7)

    do-while 循环和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和一般的 while 循环主要的区别是 do-while 的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在一般的 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 FALSE 则整个循环立即终止)。

    do-while 循环只有一种语法:<?php

    $i = 0;

    do {

    echo $i;

    } while ($i > 0);

    ?>

    以上循环将正好运行一次,因为经过第一次循环后,当检查表达式的真值时,其值为 FALSE($i 不大于 0)而导致循环终止。

    资深的 C 语言用户可能熟悉另一种不同的 do-while 循环用法,把语句放在 do-while(0) 之中,在循环内部用 break 语句来结束执行循环。以下代码片段示范了此方法:<?php

    do {

    if ($i < 5) {

    echo "i is not big enough";

    break;

    }

    $i *= $factor;

    if ($i < $minimum_limit) {

    break;

    }

    echo "i is ok";

    /* process i */

    } while(0);

    ?>

    如果还不能立刻理解也不用担心。即使不用此“特性”也照样可以写出强大的代码来。自 PHP 5.3.0 起,还可以使用 goto 来跳出循环。

    展开全文
  • while和do while二者有什么区别?下面一起来看下。操作方法01首先看下我们用while循环语句的代码,如图,while(i<=5) 的意思就是当i变量小于等于5的时候(即不大于6),就执行while语句里的代码:输出显示当前i变量...

    在php开发时,我们除了可以用for, foreach等循环语句外,还可以用while,do while循环语句。while和do while二者有什么区别?下面一起来看下。

    操作方法

    01

    首先看下我们用while循环语句的代码,如图,

    while(i<=5) 的意思就是当i变量小于等于5的时候(即不大于6),就执行while语句里的代码:输出显示当前i变量的值。

    要注意的是一定要加上i++这行代码。

    这行代码是在每次循环时让i变量加1,如果没有这行代码,那么i变量一直都是1,就永远不会跳出循环语句了。

    b9ca1e24f02f6fbe4717f90ae14e2cd9.png

    02

    运行结果如图,代码从1到5,共5次输出显示i变量的值。

    6cbbf8eb1ac7d9261940e41081143cbf.png

    03

    同样的功能,我们把代码改成用do while循环语句,

    ca0fc3892034a5aced704d02d09e6a18.png

    04

    运行后得到的结果和用while循环的语句是一样的。

    a6233a1646e1b7f805c1ecb824b9fc81.png

    05

    那么是不是二者没有区别呢?

    不是的,我们修改下循环语句的条件就可以看到区别了。修改代码,把i=1改成i=10,其他不变,代码如图。

    fcbc245fdeaec1a7179391d105873d26.png

    06

    运行结果如图,可以看到没有数字输出,因为i=10时,while(i<=5)的条件是不成立的,(10<=5肯定是不可能的),所以不会执行while里的语句。

    c0e1349749a11774a22af31b5aeb7c84.png

    07

    用do while时呢?也修改下条件,代码如图。

    9193708c72cd9f37b9a570dda208e5f5.png

    08

    运行结果如图,可以看到有输出一个数字10。

    为什么会这样?因为do while循环是先执行代码do里的语句,然后才去判断while里的语句,如果while语句符合条件,则进入下一次循环,不符合条件,则不再循环。也就是说,无论条件是否符合,都会至少执行一次do里的语句。所以就算10<=5是不成立的,代码还是执行了一次do里面的输出逻辑。这就是它和while语句的主要区别。

    6577da7b01b453a59ae12717b586607b.png

    好了,以上就是大致内容了,(END)

    声明:该文观点仅代表作者本人,天晴资讯网系信息发布平台,仅提供信息存储空间服务。

    展开全文
  • C语言中的while是计算机中一种基本的循环模式,它表示的是当表达式为真时执行预计,表达式为假时则跳出循环。C语言中的while是一种循环语句,是计算机的一种基本循环模式。当满足条件时进入循环,不满足跳出while的...
  • java零基础知识回顾(for与while的区别,以及for的一般用法) 1.for与while的区别 for和while都可以表示循环,学习java零基础的教程,了解到for循环定义的变量值只在for循环内部有效,随着for循环的结束,变量将会在...
  • While True还是While 1?

    千次阅读 2021-01-14 07:32:22
    我认为使用True更像Python,但我想看看是否有实践中有什么不同。在所以我试着做下面的事情,结果是令人惊讶的。为了什么?我可以看出解释器可以优化掉1布尔值虽然它与真实不符,却与我相反想象上的。在任何人都可以...
  • while循环使用方法

    2021-06-22 19:37:43
    while循环使用方法2019-11-01 08:53:38文/陶凯月while是计算机的一种基本循环模式。可是有什么用法呢?下面就和小编一起了解一下吧,希望对大家有所帮助。while循环的用法while循环开始后,先判断条件是否满足,如果...
  • 解析Python中while true的使用

    千次阅读 2021-01-28 19:52:30
    无限循环如果条件判断.../usr/bin/python# -*- coding: UTF-8 -*-var = 1while var == 1 : # 该条件永远为true,循环将无限执行下去num = raw_input("Enter a number :")print "You entered: ", numprint "Good by...
  • 0 ,就是一个判定成立,并且循环判定了五次忽略刚才的代码,如果我们再修改一下,看看while循环里,经常的continue , 和break是什么情况:代码编程上图,你依然可以快速的看懂打印的结果为:现在加点...
  • 如果迭代次数不是固定的,并且必须至少执行一次循环,则使用do while循环。在本教程中,您将学习Java中,Java do while循环用于迭代一组语句,直到满足给定的条件。如果迭代次数不是固定的,并且必须至少执行一次...
  • 含义:While 循环会在指定条件为真时循环在C语言中,while 和do while的死循环例子一般在运行循环语句的时候,会保证判断条件一直在做改变,所以在某个时刻导致条件为假而退出循环。...C语言while do怎么?c语...
  • while(true)作为无限循环,经常在不知道循环次数的时候使用,并且需要在循环内使用break才会停止。run()方法中基本都会写while(true)的循环,如下:public class XXXThread implements Runnable {public void run(){...
  • 也是为什么不用if用while的原因。 小声bb:我也是翻阅好多文章才知道线程阻塞,被唤醒之后竟然会接着执行线程wait方法后面的代码。我原来竟然一直傻逼的认为这个线程被阻塞之后会重新执行。菜鸟就是我我就是彩笔。...
  • while的用法_C语言中while的用法

    万次阅读 2021-05-19 05:44:46
    c语言中while的用法当n==1时执行while循环结构里的语句,当n不等于1时,则跳过该循环执行循环体外的语句。while 循环的格式:while (表达式){语句;}while 循环的执行顺序:当表达式为真,则执行下面的语句,语句...
  • 它的基本用法是:while (条件表达式) {循环语句}// 继续执行后续代码while循环在每次循环开始前,先会判断条件是否成立。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果为false,那就直接跳到while...
  • c语言中while什么意思啊? , c语言while循环的表达式c语言中while什么意思啊? , c语言while循环的表达式匿名网友:事例程序:void main(void){while(1){P2=0xfc;P2=0x00; }……}while(1)表示无限循环的执行它{ }...
  • 它以一种更高效的方法解析数据,它使用了一个函数,您也可以只提供一个数据列表。如果你想把它变成一个发电机,这也是非常容易的。在import redef parser(data):result = []for p in data:ms = re.match(r'(\S+).*?...
  • Java多线程wait为什么用while而不是if? 这个问题可以生产者消费者的例子来测试。 public class Pc { public static void main(String[] args) { Data data = new Data(); new Thread(()->{ for (int i = ...
  • #includemain(){chara;scanf_s("%c",&a);while(a!="@"){scanf_s("%c",&a);printf("kek");}printf("oo");...解决方案10不要使用while(条件)更不要使用while(组合条件)要使用while(1){if(条件1)br...
  • Java多线程为什么使用while循环来调用wait方法?《java并发编程实战》一书第14章列出了详细的原因(多看书还是会有收获滴),在此总结下来。示例代码: //示例代码,从队列中获取元素 public synchronized void put(V...
  • 谈谈Python中的while循环语句

    千次阅读 2020-12-24 12:23:26
    前言python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组。循环里面还有两个比较重要的...
  • while(1) 什么意思 while(i--)什么意思? 在C++语言中,i++与++i有什么区别?那i--和--i呢while(1) 什么意思 while(i--)什么意思? 在C++语言中,i++与++i有什么区别?那i--和--i呢相关问题:匿名网友:while语句的...
  • while与dowhile循环

    千次阅读 2020-12-21 08:15:45
    while与dowhile循环一、while 循环二、do while 循环三、死循环 一、while 循环 while是最基本的循环,它的结构为: while( 布尔表达式 ) { //循环内容 } 只要布尔表达式为 true,循环就会一直执行下去。 public ...
  • 一、while和do-while的简介1). while语句语法:while(表达式){循环体;}循环过程:1.先判断表达式,是否为真,如果为真跳转到2,否则跳转到32.执行循环体,执行完毕,跳转到13.跳出循环2). do-while语句语法:do{循环...
  • 初识循环内容概要:循环结构的基本原理学会使用while循环和do-while循环while循环的基本语法:while(循环条件){循环操作语句;}循环变量的三要素:1.初值2.判断3.更新一个实现while循环的简单案例:将一句古诗:七月...
  • Java while和do while循环

    2021-03-06 01:00:02
    Java中采用的循环语句与C语言中的循环语句相似,主要有 while、do-while 和 for。另外 Java 5 之后推出了 for-each 循环语句,for-each 循环是 for 循环的变形,它是专门为集合遍历而设计的。for-each...
  • while循环用法

    2021-07-01 20:29:52
    while循环用法2019-10-17 09:34:55文/陶凯月while一词很常见,但我们只记住了while最常见的意思是“当……的时候”,下面就和小编具体了解一下吧,供大家参考。while循环是什么意思while是计算机的一种基本循环模式...
  • check_user_login(); //检查用户是否登录$db->createcon(); //建立连接// $user=$_SESSION["user"];... //测试临时使用// 执行 user数据表 选取user数据$sql_user = "select * from user where user ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,627,501
精华内容 651,000
关键字:

while什么时候用