
JAVA并发编程
L_小乌鸦
java web
网络,计算机组成,数据结构,算法,进程模型,io模型,socket,udp,tcp
展开
-
Java并发编程:进程和线程之由来(转载)
Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程。当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通使用的,需要在实践中不断积累。由于并发肯定涉及到多线程,因此在进入并发编程主题之前,我们先来了解一下进程和线程的由来,这对后面对并发编程的理解将会有很大的帮助。 下面是本文的目录大纲:转载 2017-03-08 15:58:11 · 282 阅读 · 0 评论 -
深入剖析ConcurrentHashMap(1)
原文:http://ifeve.com/java-concurrent-hashmap-1/原文是09年时写的,在公司的邮件列表发过,同事一粟 和清英 创建的并发编程网 对这方面概念和实战有更好的文章,贴出来仅供参考。pdf格式在:http://www.slideshare.net/hongjiang/concurrent-hashmap 可以获取ConcurrentHashMap是J转载 2017-11-14 10:23:39 · 258 阅读 · 0 评论 -
对ThreadLocal实现原理的一点思考
前言在《透彻理解Spring事务设计思想之手写实现》中,已经向大家揭示了Spring就是利用ThreadLocal来实现一个线程中的Connection是同一个,从而保证了事务。本篇博客将带大家来深入分析ThreadLocal的实现原理。ThreadLocal是什么、有什么、能做什么?ThreadLocal提供一个线程(Thread)局部变量,访问到某个变量的每一个线程都拥有自己的局部变量。说白转载 2017-11-03 15:49:28 · 429 阅读 · 0 评论 -
java 自旋锁(可重入且无死锁)
java自旋锁 的实现原理:如果自旋锁被另外一个线程对象持有,那么当前获取锁的线程将陷入while循环等待,直到那个持有自旋锁的线程对象释放它所持有的自旋锁,那么那些想要获取该自旋锁的线程对象 将会有一个获得该自旋锁。 基于他这种原理,等待的时候,并不释放cpu时间片,相比synchronized wait()操作,减小了释放,重新获取的消耗。 该自旋锁适用于,当前线程竞争不强烈的时候使用转载 2017-10-31 16:13:02 · 605 阅读 · 0 评论 -
自旋锁原理及java自旋锁
一、自旋锁的概念首先是一种锁,与互斥锁相似,基本作用是用于线程(进程)之间的同步。与普通锁不同的是,一个线程A在获得普通锁后,如果再有线程B试图获取锁,那么这个线程B将会挂起(阻塞);试想下,如果两个线程资源竞争不是特别激烈,而处理器阻塞一个线程引起的线程上下文的切换的代价高于等待资源的代价的时候(锁的已保持者保持锁时间比较短),那么线程B可以不放弃CPU时间片,而是在“原地”忙等,直到锁的持转载 2017-10-31 16:10:09 · 446 阅读 · 0 评论 -
JAVA并发编程学习笔记之CAS操作
CAS操作CAS是单词compare and set的缩写,意思是指在set之前先比较该值有没有变化,只有在没变的情况下才对其赋值。我们常常做这样的操作[java] view plain copy print?if(a==b) { a++; } 试想一下如果在做a++之前a的值被改变了怎么办?a++还执行吗?出现该问题的原因是在多线转载 2017-03-15 13:07:20 · 459 阅读 · 0 评论 -
servlet是单例的 所以需要线程安全 以及如何实现线程安全
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。Servl转载 2017-03-15 09:41:41 · 7897 阅读 · 1 评论 -
Java之CyclicBarrier使用
1、类说明:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。2、使用场景:需要所有的子任务都完成时,才执行主任务,这个时候就转载 2017-03-15 09:13:26 · 325 阅读 · 0 评论 -
Java之CountDownLatch使用
CountDownLatch1、类介绍一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重转载 2017-03-15 09:07:44 · 338 阅读 · 0 评论 -
java自定义线程池--ThreadPoolExecutors
ThreadPoolExecutor类简介在Java线程池中的newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor,newScheduledThreadPool这四个线程池在底层都是调用了ThreadPoolExecutor()这个构造方法。若Executors这个类无法满足我们的需求的时候,可以自己创建自定义的线程池转载 2017-03-14 15:59:52 · 510 阅读 · 0 评论 -
Java多线程编程中Master-Worker模式的详解
Java多线程编程中,常用的多线程设计模式包括:Future模式、Master-Worker模式、Guarded Suspeionsion模式、不变模式和生产者-消费者模式等。这篇文章主要讲述Master-Worker模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Future模式的详解: Java多线程编程中Future模式的详解关于Guarded Su转载 2017-03-10 11:18:29 · 483 阅读 · 1 评论 -
Java多线程编程中Future模式的详解<转>
Java多线程编程中Future模式的详解Java多线程编程中,常用的多线程设计模式包括:Future模式、Master-Worker模式、Guarded Suspeionsion模式、不变模式和生产者-消费者模式等。这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Master-Worker模式的详解: Java多线程编程中转载 2017-03-09 16:27:05 · 561 阅读 · 0 评论 -
Java并发包中的同步队列SynchronousQueue实现原理
Java并发包中的同步队列SynchronousQueue实现原理作者:一粟介绍Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQue转载 2017-03-09 15:51:14 · 551 阅读 · 0 评论 -
ArrayBlockingQueue
来源:http://blog.youkuaiyun.com/hudashi/article/details/7076745ArrayBlockingQueue 一个由数组支持的有界阻塞队列。它的本质是一个基于数组的blocking queue的实现。 它的容纳大小是固定的。此队列按 FIFO(先进先出)原则对元素进行排序。 队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存转载 2017-03-09 15:48:00 · 255 阅读 · 0 评论 -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法来源:http://www.cnblogs.com/linjiqin/archive/2013/05/30/3108188.html在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队转载 2017-03-09 15:39:21 · 310 阅读 · 0 评论 -
深入剖析ConcurrentHashMap(2)
原文:经过之前的铺垫,现在可以进入正题了。我们关注的操作有:get,put,remove 这3个操作。对于哈希表,Java中采用链表的方式来解决hash冲突的。一个HashMap的数据结构看起来类似下图:实现了同步的HashTable也是这样的结构,它的同步使用锁来保证的,并且所有同步操作使用的是同一个锁对象。这样若有n个线程同时在get时,这n个线程要串行的等待来获取转载 2017-11-14 10:41:33 · 236 阅读 · 0 评论