1. volatile只能保证内存的可见性,取法保证原子性操作,所以java提供了各种各样的原子类以便于我们进行原子化的操作。
  2. 代码如下:
1.  package com.threestone.thread;
import java.util.concurrent.atomic.AtomicInteger;
/**
• 生成自增的seq 使用java原子类进行并发操作
• 
• @author Administrator
 */
 public class Seq {
/**• AtomicInteger: Interger类型的原子类,可以对Interger类型进行原子操作
• 
• @param: 0:初始值
 */
 private AtomicInteger value = new AtomicInteger(0);public int getNext() {
 return value.getAndIncrement();// 相当于i++
 }public static void main(String[] args) {
Seq seq = new Seq();

 new Thread(new Runnable() {

 	@Override
 	public void run() {
 		while (true) {
 			System.out.println(Thread.currentThread().getName() + " " + seq.getNext());
 			try {
 				Thread.sleep(100);
 			} catch (InterruptedException e) {
 				e.printStackTrace();
 			}
 		}
 	}
 }).start();

 new Thread(new Runnable() {

 	@Override
 	public void run() {
 		while (true) {
 			System.out.println(Thread.currentThread().getName() + " " + seq.getNext());
 			try {
 				Thread.sleep(100);
 			} catch (InterruptedException e) {
 				e.printStackTrace();
 			}
 		}
 	}
 }).start();

}

}
输出结果如下:
Thread-0 0
Thread-1 1
Thread-0 2
Thread-1 3
Thread-0 4
Thread-1 5
Thread-0 6
Thread-1 7
Thread-0 8
Thread-1 9
Thread-0 10
Thread-1 11
Thread-0 12
Thread-1 13
Thread-0 14
Thread-1 15
Thread-0 16
Thread-1 17
Thread-0 18
Thread-1 19
Thread-0 20
Thread-1 21
Thread-0 22
Thread-1 23
Thread-0 24
Thread-1 25
Thread-0 26
Thread-1 27
Thread-0 28
Thread-1 29
Thread-0 31
Thread-1 30
Thread-0 32
Thread-1 33
Thread-1 35
Thread-0 34
Thread-1 36
Thread-0 37
Thread-1 39
Thread-0 38
Thread-0 40
Thread-1 41
Thread-1 42
Thread-0 43
Thread-1 44
Thread-0 45
Thread-0 46
Thread-1 47
Thread-0 48
Thread-1 49
Thread-0 50
Thread-1 51
Thread-0 52
Thread-1 53
Thread-1 55
Thread-0 54
Thread-0 57
Thread-1 56
Thread-0 58
Thread-1 59
Thread-1 60
Thread-0 61
Thread-0 62
Thread-1 63
Thread-0 64
Thread-1 65
Thread-0 66
Thread-1 67
Thread-0 68
Thread-1 69
Thread-0 70
Thread-1 71
Thread-1 72
Thread-0 73
Thread-0 75
Thread-1 74
Thread-1 77
Thread-0 76
Thread-0 79
Thread-1 78
由此可以看出,这是可以保证原子性的。这样可以解决线程的安全性问题
getAndIncrement();// 相当于i++
value.getAndAdd(50);//相当于 i += 50;
3. 当然还有一些AtomicBoolean等,自行百度吧
4. 其底层实现原理使用的都是UnSafe类,这个类是不提供源代码的。
原理:
a. 首先获取当前线程需要更新的值
b. 进行update操作
c. 然后将原先的值和update之后的值机型比较(这是一个cas操作,这个方法返回的是一个boolean类型的结果,如果是true,则直接返回,如果是false(表示这个值可能被其他的线程已经修改过了),则会进行循环判断,直到返回true为止)