【问题标题】:Peculiar for loop - for(;;){} - in Java [duplicate]特殊的 for 循环 - for(;;){} - Java [重复]
【发布时间】:2017-04-03 00:12:13
【问题描述】:

你好 Stackoverflow 社区

我今天早些时候在以下 Java 文档 (Lock Objects) 中遇到了以下 for 循环,我想知道是否有人能够详细说明“;;”是什么意思- 循环条件是什么意思?

这里是我正在谈论的代码片段(下面提供了完整代码):

public void run() {
    Random random = new Random();
    for (;;) {
       try {
            Thread.sleep(random.nextInt(10));
        } catch (InterruptedException e) {}
        bowee.bow(bower);
    }
}

这里是整个代码示例:

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.Random;

public class Safelock {
    static class Friend {
        private final String name;
        private final Lock lock = new ReentrantLock();

        public Friend(String name) {
            this.name = name;
        }

        public String getName() {
            return this.name;
        }

        public boolean impendingBow(Friend bower) {
            Boolean myLock = false;
            Boolean yourLock = false;
            try {
                myLock = lock.tryLock();
                yourLock = bower.lock.tryLock();
            } finally {
                if (! (myLock && yourLock)) {
                    if (myLock) {
                        lock.unlock();
                    }
                    if (yourLock) {
                        bower.lock.unlock();
                    }
                }
            }
            return myLock && yourLock;
        }
            
        public void bow(Friend bower) {
            if (impendingBow(bower)) {
                try {
                    System.out.format("%s: %s has"
                        + " bowed to me!%n", 
                        this.name, bower.getName());
                    bower.bowBack(this);
                } finally {
                    lock.unlock();
                    bower.lock.unlock();
                }
            } else {
                System.out.format("%s: %s started"
                    + " to bow to me, but saw that"
                    + " I was already bowing to"
                    + " him.%n",
                    this.name, bower.getName());
            }
        }

        public void bowBack(Friend bower) {
            System.out.format("%s: %s has" +
                " bowed back to me!%n",
                this.name, bower.getName());
        }
    }

    static class BowLoop implements Runnable {
        private Friend bower;
        private Friend bowee;

        public BowLoop(Friend bower, Friend bowee) {
            this.bower = bower;
            this.bowee = bowee;
        }
    
        public void run() {
            Random random = new Random();
            for (;;) {
                try {
                    Thread.sleep(random.nextInt(10));
                } catch (InterruptedException e) {}
                bowee.bow(bower);
            }
        }
    }
            

    public static void main(String[] args) {
        final Friend alphonse =
            new Friend("Alphonse");
        final Friend gaston =
            new Friend("Gaston");
        new Thread(new BowLoop(alphonse, gaston)).start();
        new Thread(new BowLoop(gaston, alphonse)).start();
    }
}

【问题讨论】:

标签: java for-loop conditional-statements


【解决方案1】:

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

for循环的三个表达式是可选的;无限循环 可以如下创建:

// infinite loop
for ( ; ; ) {

    // your code goes here
}

请在发布之前至少用谷歌搜索文档。

【讨论】:

  • 请在回答之前至少查找重复项。
  • 我想这是我应得的。
  • 嗨@Overt_Agent。这次真是万分感谢。事实上,我确实谷歌了它,但无法找到任何确定的资源。因此感谢信息:)。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-01-12
  • 2020-10-18
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2022-11-16
  • 2015-03-21
相关资源
最近更新 更多