惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
V
Visual Studio Blog
C
Check Point Blog
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
量子位
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
M
MIT News - Artificial intelligence
爱范儿
爱范儿
B
Blog RSS Feed
MyScale Blog
MyScale Blog
H
Help Net Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
L
LangChain Blog
D
Docker

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? - 技术改变视野 一个最简单的实例理解Semaphore在Java中的作用 - 技术改变视野 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 实例带你学会简单的Java Thread多线程 - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 - 技术改变视野 一个实例带你理解JavaBean - 技术改变视野 WebFilter-SpringBoot过滤器注解实例讲解 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 - 技术改变视野 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 - 技术改变视野 一个实例理解Java Runnable多线程用处与用法 - 技术改变视野 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 - 技术改变视野 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 - 技术改变视野 大白话之Docker(壹):快速入门&&简单官方实例 - 技术改变视野 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level - 技术改变视野 Java日志插件-Slog4J下载 - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) - 技术改变视野
随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 - 技术...
adlered · 2019-12-09 · via 技术改变视野

在阅读AtomicStampedReference的源码中,在compareAndSet()方法发现一段代码:

1        return
2            expectedReference == current.reference &&
3            expectedStamp == current.stamp &&
4	    //上方条件全部符合且为True时,执行下方代码
5            ((newReference == current.reference &&
6              newStamp == current.stamp) ||
7             casPair(current, Pair.of(newReference, newStamp)));

即在return执行方法,并获取最终结果。我编写了一段代码用以测试:

 1public class Main {
 2    public static void main(String[] args) {
 3        Main main = new Main();
 4        System.out.println(
 5                main.executeIsTrue()
 6        );
 7        System.out.println();
 8        System.out.println(
 9                main.executeIsFalse()
10        );
11    }
12
13    boolean executeIsTrue() {
14        return
15                //这行判断结果为True,可以执行say(String word)方法
16                (retTrue() && retTrue()) &&
17                        //上述两条都为True,则执行下面代码
18                        (print("OK"));
19    }
20
21    boolean executeIsFalse() {
22        return
23                //这行判断结果为False,不能执行say(String word)方法
24                (retTrue() && retFalse()) &&
25                       //上述两条都为True,则执行下面代码
26                        (print("OK"));
27    }
28
29    boolean retTrue() { return true; }
30    boolean retFalse() { return false; }
31
32    boolean print(String word) { System.out.println(word); return true; }
33}

得到返回结果:

1OK
2true
3
4false

摘自https://www.cnblogs.com/yxiaooutlook/p/7606277.html

1System.out.println(true && false); //结果为false  
2System.out.println(true && true); //结果为true  
3System.out.println(false && false); //结果为false  
4System.out.println(false && true); //结果为false

即充分利用判断运算符(&&、||)返回boolean的短路,实现在return中实现类似if语句的判断