概述
CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术。
CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。
当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。
说明:
ConstraintLayout是Android Studio 2.2中主要的新增功能之一。
它和传统编写界面的方式恰恰相反,ConstraintLayout非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android Studio根据我们的操作自动生成的。
Service的启动过程从ContextWrapper的startService开始。这是因为ContextWrapper是Activity,Service和Application的父类。所以Activity,Service调用startService时最终是调用其父类ContextWrapper的startService方法。1
2
3
4@Override
public ComponentName startService(Intent service) {
return mBase.startService(service);
}
先进入google站点平台,点击右上角的登录,如果还没有谷歌账号的要先注册一个谷歌账号。然后添加资源,这里选择网址前缀,输入博客首页,例如:https://mrfzh.github.io