线程安全性
要编写线程安全的代码,核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问。
「共享」意味着变量可以由多个线程同时访问,「可变」意味着变量的值在其生命周期可以发生变化。
一个对象可以被多个线程访问,那么要让它是线程安全的,需要采用同步机制。Java的主要同步机制:
要编写线程安全的代码,核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问。
「共享」意味着变量可以由多个线程同时访问,「可变」意味着变量的值在其生命周期可以发生变化。
一个对象可以被多个线程访问,那么要让它是线程安全的,需要采用同步机制。Java的主要同步机制:
Gitblit是一个以Git为基础的代码版本管理库。Gitblit简单易用,虽然界面不及Gitlab好看,但是Gitblit配置要求低,基本没什么依赖,而Gitlab依赖较多,搭建起来不是很方便(当然如果使用Docker那就很方便啦)。
国庆假期就这么过去了,这个假期主要是在自我调节,9月份整个人的状态都偏差,各种各样的原因都有吧。假期回去和朋友玩了很多次桌游,「卡坦岛」和「卡卡颂」是最有意思,也是比较能消磨时间的。
卡坦岛:
简单的可以看成一个复杂版本的大富翁,只是游戏不单纯地由掷骰子来决定,更多的是自己的发展决策,以及玩家间的互动。而且还有扩展版,可以在原游戏基础上增添元素。
Nodejs中如何检查一个函数是否为GeneratorFunction(生成器,也就是function*)。
我一开始是想用typeof或者instanceof,发现达不到目的
其实可以这么做:
1 | function isGenerator(fn) { |
上周更新了iOS10,昨天更新了macOS Sierra,最大的感受是整个苹果的生态又往前迈进了一步。
iOS10,比较喜欢的功能是「照片」的回忆,还有「时钟」的就寝。
「回忆」是将你照片里面,以往的某个时间点的照片提取出来,还可以制作成幻灯片类型的小视频(配上背景音乐),这样的效果跟单纯一张张的翻照片的感觉确实还是不同的,出来的结果也是挺喜欢,当然跟你当时拍的照片的质量也有关。
「就寝」也是挺不错的一个功能,我把以前设置的闹钟都关掉了,直接设置「就寝」,那我晚上几点要睡,早上几点起来,它会提醒你去睡觉,早上时间到了闹钟就响了,最近我刚好在调节自己的生物钟,发现挺好用的。