本文基于我在2月27日Gopher北京聚会演讲整理而成,进行了一些补充以及调整。投稿给《高可用架构》公众号首发。 聊这个话题之前,先梳理下两个概念,几乎所有讲并发的文章都要先讲这两个概念: 并发(concurrency) 并发的关注点在于任务切分。举例来说
日期:2016年07月18日我是通过new了一个Thread2对象进行调用方法启动的三个线程,这个三个线程是用的同一个对象,所以用synchronized加在了方法上,已经实现了对这个方法并发访问控制,下面再来测试一下多个对象访问 代码2: package
日期:2015年11月25日public class Thread5 { public static void main(String[] args) { Thread5_1 t5 = new Thread5_1(); t5.start(); t5.interrupt(); Thread.currentThread().interrupt(); System.out.println(" 1 "+Thread.interrupted()); System.out.println(" 2 "+Thread.interrupted());
日期:2015年12月10日dispatch机制,我们看看并发操作怎么写: #import <Foundation/Foundation.h> //#include "/usr/local/include/dispatch/dispatch.h" typedef unsigned long long
日期:2015年06月27日/* * ---------------------------------------------------- * 使用LockSupport来实现 * 使用park,unpark实现基本线程控制方法, 更底层 * 没有必要的话,不要用这样的方式来控制线程,这里仅是做个试验 * ---------------------------------------------------- */ class LockSupportSema implements IMySemaphore { private AtomicInteger _iSignal; private final
日期:2016年02月03日NSOperation 是Objective-C中一种高级的并发处理方法,现在对GCD的封装;功能比 GCD更强大! 两个概念 操作; 操作队列; NSOperation多线程实现步骤 实现多线程的步骤就是,把操作
日期:2015年12月06日Handler形式处理,因此,它是线程安全的,这也表示它不支持并发处理;而AIDL方式是非线程安全的,支持并发处理,因此,我们使用AIDL方式时需要保证代码的线程安全。 大部分情况下,我们应用中不需要并发处理。因此,我们通常只需要使用Messager方式。 思想:在进程
日期:2016年01月07日转载地址:【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要
日期:2016年06月03日时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。 Servlet的多线程机制 Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器
日期:2015年07月16日前面学习了Executor框架,它将任务的创建和执行进行了分离,通过这个框架,只需要创建Runnable对象,把Runnable对象交给Executor执行器,Executor执行器在负者执行这些任务的线程创建,管理以及线程的结果。JDK1.7 Concurrent包提供了一个新的Fork/join框架。是ExecutorService接口的另一种实现。 Fork/Join框架介绍 Fork/join框架用来解决能够通过分治技术将问题划分为小任务的问题,能够充分的利用计算机的资源,类似于MapReduce。如果问题的大小超过了一个设定值,就把任务划分成小任务,通过框架执行这些小问题,如果问题的
日期:2016年06月11日概述 基于数组+单链表优点构造的Map,非线程安全。 1)实现原理等效于Hashtable,Hashtable虽然为线程安全的,但由于其读写方法均为synchronized,并发效率低; 2)在哈希函数哈希合理情况下,基础操作get、put
日期:2016年04月20日的或正在进行 LISTEN //服务器在等待进入呼叫 SYN_RECV //一个连接请求已经到达,等待确认 SYN_SENT //应用已经开始,打开一个连接 ESTABLISHED //正常数据传输状态/当前并发连接数 FIN_WAIT1 //应用说它已经完成
日期:2016年01月07日在前面已经学习过 Java并发编程-同步辅助类之CountDownLatch Java并发编程-同步辅助类之CyclicBarrier 这篇文章介绍另一个辅助类Phaser,它是Jdk 1.7才添加的新的功能,它可以实现和CountDownLatch
日期:2016年06月07日ArrayBlockingQueue是个有数组支持的有界的阻塞队列。该队列按照先进先出FIFO的原理对元素排序,插入新元素市场队列的尾部,获取新元素是操作队列的开始处。一旦见了建立了缓存区,就不能再增加其容量,试图从已满的队列中方式元素会导致操作阻塞;试图从空的队列中提取元素将导致阻塞。 提拱了四种方法,只有put(),take()才会发生阻塞。 下面是阻塞队列的例子。 package andy.thread.test; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQu
日期:2014年11月09日、notify机制。 Java并发包中的信号量Semaphore实际上是一个功能完毕的计数信号量,从概念上讲,它维护了一个许可集合,对控制一定资源的消费与回收有着很重要的意义。Semaphore可以控制某个资源被同时访问的任务数,它通过acquire()获取一个
日期:2015年11月17日本篇博客讲述的是单客户端单线程模型,该模型同样由主进程统一accept,只是将fork改为了pthread_create。 与进程相比,线程有很多优点(速度快,占用资源少,数据可以共享), 该模型结构如图所示: 与上一篇博客讲述的模型非常类似,源代码同上一篇相比只有少量更改而已,亦不讲解。 服务器端代码如下: /* author:arvik purpose:test the server simultaneity email:1216601195@qq.com csdn: http://blog.csdn.net/u012819339 */ #include <sys/types.h> #i
日期:2016年03月15日在上篇博客中我多次说到,当线程调用interrupt方法的是,并不是立刻停止当前线程,而是给该线程赋予了一个停止的标志。那么如何证明这句话的真伪呢。看代码。 package org.netease.concurrent; public class Thread5 { public static void main(String[] args) throws InterruptedException { Thread5_1 t5 = new Thread5_1(); t5.start(); Thread.sleep(10); t5.
日期:2015年12月11日serialQueue 的操作必定在输出 2 后进行,因此 2 必定在 3 前输出。 串行和并行是针对一个队列中的多个任务执行顺序而言的。串行队列是指队列中的任务是一个接一个地执行的,队首的任务执行完毕后才能执行其后面的任务,直至执行队尾的任务;并行队列是指队列中的任务可以并发
日期:2015年12月14日is locked和java.lang.IllegalStateException: attempt to re-open an already-closed object.这两个是我们最常见的数据库并发异常。问题要一个一个的解决,我先说说数据库锁定出现的原因,能够明白
日期:2015年01月22日能被其它线程可见提供了保证,它们之间是先行发生关系。这个关系定义了一些规则让程序员在并发编程时思路更清晰。比如,先行发生关系确保了: 线程内的代码能够按先后顺序执行,这被称为程序次序规则。 对于同一个锁,一个解锁操作一定要发生在时间上后发生的另一个锁定操作之前
日期:2016年06月12日