5、AtomicXXX

AtomicXXX 都是
CAS(无锁优化 自旋 乐观锁)
Compare And Set
Compare And Swap


cas(V,Expected,NewValue)
    -if V == E
    V  = New
    otherwise try again or fail
    -CPU原语支持
先获取一下


ABA问题:   符合Expected
    -加version
    -A 1.0
    -B 2.0
    -A 3.0
    -cas(version)
版本号   检查版本号
如果基础类型 -无所谓   -引用类型  你的女朋友跟你复合,中间经历了别的女人

== Unsafe ==c c++的指针  单例模式
直接操作java虚拟机的内存
c ->malloc free c++ -> new delete
 

public class T01_AtomicInteger {
	/*volatile*///int count = 0;
	//原子操作
	AtomicInteger count = new AtomicInteger();
	
	/*synchronized*/void m() {
		for(int i =0; i < 10000; i++)
			//if count.get() < 1000
			count.incrementAndGet();
	}
	public static void main(String[] args) {
		T01_AtomicInteger t = new T01_AtomicInteger();
		List<Thread> threads = new ArrayList<Thread>();
		
		for(int i=0;i<10;i++) {
			threads.add(new Thread(t::m,"thread-" + i));
		}
		threads.forEach((o) -> o.start());
		
		threads.forEach((o) ->{
			try {
				o.join();
			}catch (InterruptedException e) {
				e.printStackTrace();
			}
		});
		System.out.println(t.count);
	}
}

我是7年经验的程序员,以下面试题请给我答案,要求全面有深度: 1.线程池核心参数有哪些?线程池工作流程?有哪几种线程池?说明不同线程池类型的使用场景及其优缺点? 2.synchronized和ReentrantLock有什么区别?在实际项目中,您如何选择使用它们? 4.什么是死锁?如何预防和解决死锁? 5.阻塞队列有哪些?分别介绍一下 6.在并发编程中,CountDownLatch、CyclicBarrier和Semaphore有何异同?请举例说明它们各自的使用场景。 7.如何通过使用volatile关键字解决Java中的可见性问题?volatile与原子操作有什么关系? 8.ConcurrentHashMap在Java1.8中相比之前的版本有哪些重要改进? 9.ConcurrentHashMap是线程安全的吗?在哪种情况下可能会出现数据一致性问题?您会如何防止这种情况发生? 10 在处理并发数据访问时,您是如何考虑选择乐观锁还是悲观锁的?为什么? 11.HashMap存储数据的过程 12.介绍一下ThreadLocal,ThreadLocal内存泄漏问题 13.谈谈你是如何理解线程安全的?有哪些实现线程安全的方案? 14.并发和并行的区别? 15.synchronized的实现原理?它是如何保证原子性、可见性及有序性?锁升级的过程是怎么样的?synchronized是非公平锁吗,是如何体现非公平的? 16.如何理解CAS?存在什么问题?CAS一定要自旋吗? 17.介绍一下AQS?AQS中的同步队列和条件队列原理?什么是AQS的独占模式和共享模式?AQS为什么采用双向链表?
10-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值