开发&语言 - Java 并发编程 19
文章 发布于 2017年07月25日  阅读 7928
Google的三篇论文影响了很多很多人,也影响了很多很多系统。这三篇论文一直是分布式领域传阅的经典。根据MapReduce,于是我们有了Hadoop;根据GFS,于是我们有了HDFS;根据BigTable,于是我们有了HBase。而在这三篇论文里都提及Google的一个Lock Service —— Chubby,哦,于是我们有了Zookeeper。随着大数据的火热,Hxx们已经变得耳熟能详,现在...
作者  郑杭进  发布于 2017年07月24日  阅读 2045
作为一名程序员,相信大家在软件架构图上经常见到 “Nginx + Lua” 的字样,但是对于Lua在Web应用中的作用并没有多少了解。该篇文章对 Lua 的语言特性、优势等方面做介绍,并通过介绍一个天气预报的 Web 应用,让大家对 Lua 在Web应用中充当的角色有一个直观的认识。什么是 LuaLua 是用标准C语言编写的一种小巧的脚本语言,并以源代码形式开放。Lua 并没有提供强大的库,所以我...
文章 发布于 2017年07月21日  阅读 10369
现今互联网界,分布式系统和微服务架构盛行。一个简单操作,在服务端非常可能是由多个服务和数据库实例协同完成的。在一致性要求较高的场景下,多个独立操作之间的一致性问题显得格外棘手。基于水平扩容能力和成本考虑,传统的强一致的解决方案(e.g.单机事务)纷纷被抛弃。其理论依据就是响当当的CAP原理。往往为了可用性和分区容错性,忍痛放弃强一致支持,转而追求最终一致性。分布式系统的特性在分布式系统中,同时满足...
作者  王新栋  发布于 2017年07月17日  阅读 8128
一台Java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。图:京东自研UMP监控分析打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下:图:IBM Thread and Monitor Dump Analyzer for Java共计1661个线程,和监控数据得出的吻合。但这个数量应该是大了...
文章 发布于 2017年06月26日  阅读 1568
什么是阻塞队列 BlockingQueue队列是一种数据结构,它的特点是先进先出(First In First Out),它有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素。队列在多线程应用中,常用于生产-消费场景。BlockingQueue 是 Java util.concurrent 包下重要的数据结构,BlockingQueue 提供了线程安全的队列访问方式:当阻塞队列进行插入...
文章 发布于 2016年10月24日  阅读 1282
Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类实例代码:// 允许2个线程同时访问final Semaphore semaphore = new Semaphore(2);ExecutorService executorService = Executors.newCachedThreadPool();for (int i = 0; i = 0;}Sync的nonfair...
文章 发布于 2016年10月04日  阅读 484
前言Java1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦,只需把Task描述清楚,然后提交即可。至于这个Task是怎么被执行的,被谁执行的,什么时候执行的,就全部交给线程池管理。小案例废话不多说,先来一个小小案例。import java.util.concurrent.*;public class ExecutorTest { static ExecutorServi...
文章 发布于 2016年08月19日  阅读 452
前言并发是计算机发展的成就。(并发,同一时段发生;并行,同一时刻发生)我们知道,早期计算机只能串行的进行运行(最古老的打孔)。而经过多年的发展,计算机可以“同时”做很多事情。但悲剧的是,因为CPU速度和其它设备之间的速度差别太大,比如磁盘IO、网络传输、数据库访问等等,如果不希望CPU在进行这些操作时一直处于等待的状态,就要充分压榨它的性能让它干别的事情。目前在服务器端,衡量一个服务性能的高低好坏...
文章 发布于 2015年07月16日  阅读 1153
Spring 中管理的 Bean 实例默认情况下是单例的(sigleton 类型),但 Spring 中的单例并不会影响应用的并发访问。E.g. 从客户端传递到后台 controller - Service - Dao 这一个流程中,它们这些对象都是单例的,那么这些单例的对象在传递实体 bean 时不会出问题么?由于实体 bean 不是单例的,并没有交给 Spring 来管理,每次都是手动的 Ne...
文章 发布于 2015年01月22日  阅读 360
线程共有6种状态;在某一时刻只能是这6种状态之一。这些状态由 Thread.State 这个枚举类型表示,并且可以通过 getState() 方法获得当前具体的状态类型。NEWThread myThread=new MyThread("myThread");MyThread 实例化之后但还没有执行 start(),这时线程的状态是 NEW。RUNNABLE可运行的线程状态。Thread myThr...
文章 发布于 2014年10月21日  阅读 1795
Threadlocal 是否存在内存泄露,需要解决以下的疑惑:1. ThreadLocal.ThreadLocalMap 中提到的弱引用,弱引用究竟会不会被回收?2. 弱引用什么情况下回收?3. JAVA 的 ThreadLocal 和在什么情况下会内存泄露?最近看到网上的一篇文章,分析说明 ThreadLoca l是如何内存泄露的。代码例子普遍是这样子的:public class Test { ...
文章 发布于 2014年10月12日  阅读 2283
对操作都用synchronized关键字进行修饰,保证对属性a的同步访问,虽然可以保证在并发环境下a的一致性,但是由于使用了锁,锁的开销,线程的调度等等会使得程序的伸缩性受到了限制,于是就有了很多无锁的实现方式。无锁编程 / lock-free / 非阻塞同步无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocki...
文章 发布于 2014年10月11日  阅读 1612
BlockingQueue的核心方法boolean add(E e) // 把e添加到BlockingQueue里。如果BlockingQueue可以容纳,则返回true,否则抛出异常。boolean offer(E e) // 表示如果可能的话,将e加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false。void put(E e) // 把...
文章 发布于 2014年10月10日  阅读 709
ThreadPoolExecutor的完整构造方法的签名是:ThreadPoolExecutor( int corePoolSize, // 线程池维护线程的最少数量 int maximumPoolSize, // 线程池维护线程的最大数量 long keepAliveTime, ...
文章 发布于 2014年10月07日  阅读 2194
SimpleDateFormat是非线程安全。由于创建一个 SimpleDateFormat 实例的开销比较昂贵,解析字符串时间时频繁创建生命周期短暂的实例导致性能低下。所以将 SimpleDateFormat 定义为静态类变量。但是,但是 SimpleDateFormat 是非线程安全的。如果用 synchronized 线程同步同样面临问题,同步导致性能下降。
共19条记录 共2页 上一页 首页 1