多线程,并发
文章平均质量分 76
水银湖
这个作者很懒,什么都没留下…
展开
-
两个栈实现一个队列
解释一:从队列的概念可以知道,队列无非是先进先出,而栈是先进后出,如果要栈s1 做出队列的行为,只能用另外一个栈s2接收s1的size-1个元素,然后把栈s1栈底元素弹出,再把s2的元素重新压入栈s1即可解释二:也可以稍作优化,比如不再倒回,这样可以优化连续弹出原创 2017-02-16 16:42:13 · 186 阅读 · 0 评论 -
实现多线程 的几种方式
有三种: (1)继承Thread类,重写run函数 创建: [java] view plain copy"font-size:12px;">class xx extends Thread{ public void run(){ Thread.sleep转载 2017-02-15 17:19:56 · 227 阅读 · 0 评论 -
进程与线程
什么是进程,什么是线程系统要做一件事,运行一个任务,所有运行的任务通常就是一个程序;每个运行中的程序就是一个进程,这一点在任务管理器上面可以形象的看到。当一个程序运行时,内部可能会包含多个顺序执行流,每个顺序执行流就是一个线程。关于进程的特性独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间。在没有经过转载 2017-02-15 17:33:03 · 436 阅读 · 0 评论 -
jvm了解
http://blog.csdn.net/albertfly/article/details/51623138原创 2017-02-27 11:33:20 · 177 阅读 · 0 评论 -
ThreadLocal与Inheritable ThreadLocal
ThreadLocal使用ThreadLocal可以让线程拥有本地变量,在web环境中,为了方便代码解耦,我们通常用它来保存上下文信息,然后用一个util类提供访问入口,从controller层到service层可以很方便的获取上下文。下面我们通过代码来研究一下ThreadLocal。新建一个ThreadContext类,用于保存线程上下文信息public class ThreadConte转载 2017-11-07 15:28:00 · 273 阅读 · 0 评论 -
newFixedThreadPool
在上一章中我们概述了一下线程池,这一章我们看一下创建newFixedThreadPool的源码。例子还是我们在上一章中写的那个例子。创建newFixedThreadPool的方法:[java] view plain copypublic static ExecutorService newFixedThreadPool(int nTh转载 2017-10-25 10:59:51 · 1080 阅读 · 0 评论 -
delayqueue
在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。Delayed,一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。此接口的实现必须定义转载 2017-10-25 22:35:05 · 165 阅读 · 0 评论 -
w-tinyLFU
缓存设计是个基础架构领域里的重要话题,本号之前也有谈论过相关话题,点击原文可以看之前的介绍。 近日,HighScalability网站刊登了一篇文章,由前Google工程师发明的W-TinyLFU——一种现代的缓存。那么,什么缓存设计能够被称作是“现代”的呢? 当数据的访问模式不随时间变化的时候,LFU的策略能够带来最佳的缓存命中率。然而LFU有两个缺点:首先,它需要给每个记录项维...转载 2018-08-23 19:55:28 · 3927 阅读 · 0 评论 -
BlockingQueue概述
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个转载 2017-02-15 17:10:07 · 162 阅读 · 0 评论 -
线程的五大状态
线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。 1.新建状态(New): 当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码 2.就绪状态(Runnable)转载 2017-02-15 16:28:58 · 287 阅读 · 0 评论 -
countDownLatch与join的区别
首先,我们来看一个应用场景1:假设一条流水线上有三个工作者:worker0,worker1,worker2。有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0和worker1完成了他们的工作,而worker0和worker1是可以并行他们各自的工作的。如果我们要编码模拟上面的场景的话,我们大概很容易就会想到可以用join来做。当在当前线程中调转载 2017-02-15 16:20:22 · 230 阅读 · 0 评论 -
产生0-10000000随机数,考虑效率
其实我的写法并不是生成随机数,而是生成若干个范围内的随机数,概念不影响package com.mercurylake.test.stack;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Random;import java.util.Set;impo原创 2017-02-16 18:26:48 · 1263 阅读 · 0 评论 -
JVM参数调优
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms3550m -转载 2017-02-20 15:04:38 · 170 阅读 · 0 评论 -
常见的四种连接池实现
各种线程池父类:ThreadPoolExecutor构造函数如下:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,原创 2017-02-14 15:23:17 · 1508 阅读 · 1 评论 -
Synchroniz用法
1.同一个类的synchronized 锁住的方法,同一时间不能有多个线程同时访问package com.mercurylake.test.tree;import java.util.HashSet;import java.util.Set;import org.apache.commons.lang.StringUtils;import com.sun.swing.internal原创 2017-02-14 18:08:43 · 681 阅读 · 0 评论 -
可重入锁
可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁,之所以设计成可重入锁是为了避免死锁package com.mercurylake.test.lock;import java.util.concurrent.locks.ReentrantL原创 2017-02-15 10:26:58 · 303 阅读 · 0 评论 -
ReentrantLock与Synchronized异同
1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的原创 2017-02-15 10:58:28 · 243 阅读 · 0 评论 -
AtomicInteger//volatile //cas原理以及用法
CAS原理: 通过查看AtomicInteger的源码可知, `private volatile int value;public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(this,原创 2017-02-15 15:42:52 · 913 阅读 · 0 评论 -
线程之间通信 wait notify
线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务。 Object类中相关的方法有两个notify方法和三个wait方法: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html 因为wait和notify方法定义在Object类中,因此会被所有的类所继承。转载 2017-02-15 15:53:46 · 161 阅读 · 0 评论 -
线程池
为什么用线程池博客地址 http://blog.csdn.net/qq_25806863原文地址 http://blog.csdn.net/qq_25806863/article/details/71126867有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长...转载 2018-09-28 19:18:15 · 186 阅读 · 0 评论