java并发编程
漫步夕阳下
临渊羡鱼,不如退而结网
展开
-
Java并发编程的挑战
1.1上下文切换单核处理器也支持多线程执行代码,因为CPU通过各每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,时间片非常短,所以CPU不停地切换线程执行,让我们感觉线程是在并行,其实是串行的,时间片一般几十毫秒。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可...原创 2019-04-08 15:09:45 · 149 阅读 · 1 评论 -
JUC:ExecutorService使用
new Thread的弊端:new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();1.线程的创建和释放,需要占用不小的内存和资源,每次new Thread新建对象性能差。2.线程缺乏统一...原创 2019-04-19 11:18:10 · 252 阅读 · 1 评论 -
volatile关键字详解
转载自https://www.cnblogs.com/dolphin0520/p/3920373.html#!comments,转载后,对原文进行了一定的优化与修改今天看并发包中ConcurrentHashMap类的源码时,发现了一个volatile关键字,于是便查阅了一些资料,来分析下这个关键字的作用。volatile涉及到的东西比较多,涉及到java内存模型等知识,我们一步步的来说。内...转载 2018-08-05 12:11:49 · 175 阅读 · 1 评论 -
CAS原理分析
CAS的英文为Compare and Swap 翻译为比较并交换。CAS加volatile关键字是实现并发包的基石。没有CAS就不会有并发包,synchronized是一种独占锁、悲观锁,java.util.concurrent中借助了CAS指令实现了一种区别于synchronized的一种乐观锁。什么是乐观锁与悲观锁?悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所...原创 2018-08-13 10:26:11 · 32358 阅读 · 10 评论 -
zookeeper使用zkClient实现简单的master选举
什么是master选举?为了保证服务的7*24小时可用,不能有过长的故障时间,于是我们使用服务器集群,采用master+slave。集群中有一台主机和多台备机,主机对外提供服务,备机监听主机状态,一旦主机宕机,备机必须迅速接管主机继续向外提供服务。在这个过程中从备机选出一台机器作为主机的过程就是Master选举。master选举利用了zookeeper临时节点的临时性与唯一性与zookee...原创 2019-04-21 23:06:08 · 491 阅读 · 0 评论 -
Timer与ExecutorService的比较
这里ExecutorService就不讲了,可以看下我之前的一篇博客:https://blog.csdn.net/qq_37113604/article/details/89396015首先看下Timer的使用:Java中需要使用Timer与TimerTask两个类来配合完成定时任务。Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask是一个抽象类,代表...原创 2019-04-21 11:12:55 · 396 阅读 · 1 评论 -
Java并发编程:Lock
一、synchronized的缺陷synchronized是Java的关键字,也就是Java语言内置的特性。那么为什么会出现Lock呢?线程等待如果一个代码块被synchronized修饰,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里拿着锁的线程只会有两种情况释放锁:1.获得锁的线程执行完了该代码块,然后线程释放对锁的占有。...原创 2019-04-13 19:30:52 · 209 阅读 · 3 评论 -
Java内存模型-Java内存模型的基础
Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员。本文将揭开Java内存模型神秘的面纱。本章大致分为4部分:Java内存模型的基础,Java内存模型顺序一致性,同步原语,Java内存模型的设计。3.1Java内存模型的基础3.1.1并发编程模型的两个关键问题线程之间如何通信?线程之间如何同步?通信指线程之间以何种机制交换信息,在命令式编程中,线程之间的...原创 2019-04-09 22:07:08 · 166 阅读 · 2 评论 -
Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终转化成汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令,本文将深入底层一起探索Java并发机制的底层实现。2.1volatile的应用多线程并发编程中synchronized和volatile都扮演着重要角色,volatile是轻量级的synchronized,...原创 2019-04-08 22:39:52 · 305 阅读 · 1 评论