java基础复习五:for(;;)的写法

本文通过具体示例解析了Java中无限循环自旋操作的使用场景及意义,并提供了实际代码来帮助理解何时以及如何跳出此类循环。

最近在学习并发的时候,经常看到这种写法:

        for (;;) {
            .......;
        }

突然觉得自己不理解在这种写法的意义;

测试代码:

 public static void main (String[] args) {

        for (;;) {
            System.out.println(123);
        }

    }

毫无疑问,这种会无限循环,没有结束,所以使用这种写法必须要有跳出循环代码。

看一个java源码:

    private Node enq(final Node node) {
        for (;;) {
            Node t = tail;
            if (t == null) { // Must initialize
                if (compareAndSetHead(new Node()))
                    tail = head;
            } else {
                node.prev = t;
                if (compareAndSetTail(t, node)) {
                    t.next = node;
                    return t;
                }
            }
        }
    }

这是一个自旋操作,因为t变量无法保证可以使用,所以有了一个if-else判断;

在这个例子上,就可以知道,使用这种写法的时候,要有外部变量,变量不能保证可以使用,循环体内部有根据不同情况,选择执行不同的代码,必须有一个选择可以跳出循环。

现在写一个满足这些条件的无限循环。

public static void main (String[] args) {

        int i = 1;
        String str;
        for (;;) {
            if (i == 1) {
                i = 2;
            } else if (i == 2) {
                i = 3;
            } else if (i == 3) {
                str = "跳出循环";
                break;
            }
        }

        System.out.println(str);
    }

这样再看一些源码的时候,就不会看不懂这样代码的含义了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值