0%

说起JAVA并发编程,就不得不聊聊CAS(Compare And Swap)和AQS了(AbstractQueuedSynchronizer)。


CAS(Compare And Swap)

什么是CAS

CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指令之前返回该位置的值。CAS有效地说明了“我认为位置V应该包含值A;如果包含该值,则将B放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。

在JAVA中,sun.misc.Unsafe 类提供了硬件级别的原子操作来实现这个CAS。 java.util.concurrent 包下的大量类都使用了这个 Unsafe.java 类的CAS操作。至于 Unsafe.java 的具体实现这里就不讨论了。

阅读全文 »

前言

Java多线程编程中,保证线程安全通常会使用到synchronizedLock。那么合适该使用synchronized,什么时候该使用Lock呢。这个就需要我们对synchronizedLock有个清晰的了解。


Locksynchronized

synchronized 是JAVA提供的强制原子性的内置锁机制。一个synchronized有两部分:锁对象的引用 (synchronized 方法的锁,就是该方法所在对象本身),以及这个锁保护的代码块。每个Java对象都可以作为一个用于同步的锁的角色,这些内置的锁被成为内部锁,线程进入 synchronized 块之前会自动获得锁,退出、报错异常、时会释放锁。内部锁是一种互斥锁,这就是说,至多只有一个线程可以获得锁,所以被 synchronized 声明的方法或代码块至多只有一个线程可以进入。从而保证了线程安全。 大致有如下用法:

1
2
3
4
5
6
7
8
9
//作用于方法
public synchronized void synchronizedMethod(){
//do something
}

// 作用与代码块
synchronized (syncObj){
//do something
}
阅读全文 »

Github Pages和Hexo介绍

Github PagesGithub 推出的一个福利。可以在上面构建个人页面。**Hexo** 就是一个快速、简洁且高效的博客框架(官网上是这么说的,hhh),并且支持一键部署到github。可以用它来构建自己的个人博客,当hexo遇到Github pages时,我们就不需要自己的一个服务器就可以搭建一个个人博客网站了。下面开始讲搭建过程。

阅读全文 »

市盈率(PE): 市盈率是上市公司股价与每股收益(年)的比值。即:市盈率=股价/每股收益(年)。明显地,这是一个衡量上市公司股票的价格与价值的比例指标。可以简单地认为,市盈率高的股票,其价格与价值的背离程度就越高。也就是说市盈率越低,其股票越具有投资价值。

空头行情/多头行情: 股价长期保持上涨势头的股票行情称为多头行情。多头行情股价变化的主要特征是一连串的大涨小跌。 股价长期呈下跌趋势的股票行情称为空头行情,空头行情股价变化的特征是一连串的大跌小涨。 多头是指投资者对股市看好,预计股价将会看涨,于是趁低价时买进股票,待股票上涨至某一价位时再卖出,以获取差额收益。 空头是投资者和股票商认为现时股价虽然较高,对股市前景看坏,预计股价将会下跌,于是把借来的股票及时卖出,待股价跌至某一价位时再买进,以获取差额收益。采用这种先卖出后买进、从中赚取差价的交易方式称为空头。

未完待续

由于公司对电脑安全做了较多的限制。自己无法使用MySql的msi文件来安装Mysql。于是下了个mysql的zip压缩包来使用。 Mysql下载地址,我下的是版本为mysql-5.7.18-winx64.zip

下载后解压到任意目录,进入到解压后的mysql-5.7.18-winx64。 按照以往的经验。首先进入到bin目录下运行mysqld.exe来初始化mysql。

1
D:\Dev\MySql\mysql-5.7.18-winx64\bin>mysqld.exe --initialize

不幸的是,失败了。错误日志如下:

1
2
3
4
5
D:\Dev\MySql\mysql-5.7.18-winx64\bin>mysqld.exe
mysqld: Could not create or access the registry key needed for the MySQL application to log to the Windows EventLog.
Run the application with sufficient privileges once to create the key, add the key manually, or turn off logging for that application.
mysqld: Can't change dir to 'D:\Dev\MySql\mysql-5.7.18-winx64\data\' (Errcode: 2 - No such file or directory)
...
阅读全文 »