java 死循环 while(true) vs for(;;)

今天在看AtomicInteger的乐观锁实现(CAS);读源码发现它的死循环式是这么写的

/**
     * Atomically decrements by one the current value.
     *
     * @return the previous value
     */
    public final int getAndDecrement() {
        for (;;) {
            int current = get();
            int next = current - 1;
            if (compareAndSet(current, next))
                return current;
        }
    }

采用的是for(;;) 而我常用的习惯是用while(true),这两者有什么区别呢。是不是for(;;)要比while(true)快呢?

做了如下测试

/**
 * MainTest
 *
 * @author lilin
 * @date 16/12/1
 */
public class MainTest {
    public static void main(String[] args) {
        forTest();
        whileTest();
    }

    public static void forTest(){
        for(;;){
            System.out.println("for");
        }
    }

    public static void whileTest(){
        while (true){
            System.out.println("while");
        }
    }
}

编译 javac -p src/main/java/classes src/main/java/MainTest.java
编译后的文件MainTest.class 代码如下

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

public class MainTest {
    public MainTest() {
    }

    public static void main(String[] var0) {
        forTest();
        whileTest();
    }

    public static void forTest() {
        while(true) {
            System.out.println("for");
        }
    }

    public static void whileTest() {
        while(true) {
            System.out.println("while");
        }
    }
}

发现最后都变成了while(true) 得出的结论他们最终的效果应该是一样的 。

时间: 2024-08-30 20:10:58

java 死循环 while(true) vs for(;;)的相关文章

Java中的Timer和TimerTask在Android中的用法

在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务.比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask. Timer是一个普通的类,其中有几个重要的方法:而TimerTask则是一个抽象类,其中有一个抽象方法run(),类似线程中的run()方法,我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作. schedule方法有三个参数 第一个参数就是TimerTask类型的对象

Eclipse Java注释模板设置详解

原文:http://blog.csdn.net/ahhsxy/article/details/4542682 设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦.现就每一个元素逐一介绍: 文件(Files)注释标签: /**    * @Title: ${file_name} * @Package ${package_name} * @Descripti

java定时器使用

定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行.定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务. schedule(TimerTask task, Date time)设定指定任务task在指定时间time执行. cancel()方法结束这个定时器. schedule(TimerTask task, lo

Java发送邮件报错:Network is unreachable

使用javamail发送邮件时,老是提示Network is Network: ? 1 2 3 4 com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.163.com, 25; timeout -1;   nested exception is:     java.net.SocketException: Network is unreachable: connect     at com.su

Java 正则表达式常用惯例

Java 正则表达式常用惯例 1,判断字符串是否是HTML页面   Java代码   /***       * 判断是否是HTML 网页       * @param input       * @return       */       public static boolean isHTMLWebPage(String input){           if(ValueWidget.isNullOrEmpty(input)){               return false;  

Java NIO 系列教程

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO.感谢并发编程网的翻译和投递.  (关注ITeye官微,随时随地查看最新开发资讯.技术文章.)  [本文转载于 Java NIO 系列教程] Java NIO提供了与标准IO不同的IO工作方式:  Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channe

Java NIO 系列教程(转)

原文中说了最重要的3个概念,Channel 通道Buffer 缓冲区Selector 选择器其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步的非堵塞模式才加入的东西.以前的流总是堵塞的,一个线程只要对它进行操作,其它操作就会被堵塞,也就相当于水管没有阀门,你伸手接水的时候,不管水到了没有,你就都只能耗在接水(流)上.nio的Channel的加入,相当于增加了水龙头(有阀门),虽然一个时刻也只能接一个水管的水,但依赖轮换策略,在水量不大的时候,各

java定时器的具体使用和web使用

 公司部分项目提出将某些项目进行静态化...所以在测试页面命中率和数据库访问量之后针对某些写的频率比较低和访问比较大页面进行静态化.当然也不是进行实时的静态化.这里需要使用定时器来进行静态化的控制.下面了解一下定时器的应用!1.具体方法的了解   (1)Timer.schedule(TimerTask task,Date time)//安排在制定的时间执行指定的任务.   (2)Timer.schedule(TimerTask task,Date firstTime ,long period)/

《Java 7程序设计入门经典》一2.2 Java的基本数据类型

2.2 Java的基本数据类型 Java包括两大类内置的数据类型:面向对象的数据类型和非面向对象的数据类型.Java中面向对象的数据类型由类定义,在后面会有类的介绍.但是,Java的核心是8种基本数据类型(也称元素数据类型或简单数据类型),如表2-1所示.这里使用"基本"(primitive)这个词来表示,从面向对象的角度看,这些类型不是对象,而是普通的二进制值.出于有效性,这些基本数据类型不是对象. Java为每个基本数据类型严格指定范围和行为.所有Java虚拟机都必须支持这些.因为