并发与多线程
Barry_2012
这个作者很懒,什么都没留下…
展开
-
多线程中sleep()、wait()等常用方法的区别
1、这两个方法来自不同的类分别是Thread和Object 2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用(使用范围) synchronized(x){ x.notify() //或者w转载 2017-08-08 10:23:32 · 511 阅读 · 0 评论 -
Hashtable与ConcurrentHashMap区别
ConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。但是hashtable每次同步执行的时候都要锁住整个结构。看下图:图左侧清晰的标注出来,lock每次都要锁住整个结转载 2017-09-26 19:35:34 · 280 阅读 · 0 评论 -
JAVA线程池原理详解二
Executor框架的两级调度模型在HotSpot VM的模型中,JAVA线程被一对一映射为本地操作系统线程。JAVA线程启动时会创建一个本地操作系统线程,当JAVA线程终止时,对应的操作系统线程也被销毁回收,而操作系统会调度所有线程并将它们分配给可用的CPU。在上层,JAVA程序会将应用分解为多个任务,然后使用应用级的调度器(Executor)将这些任务映射成固定数量的线程;在底转载 2017-09-24 16:03:22 · 237 阅读 · 0 评论 -
JAVA线程池原理详解一
线程池的优点1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。线程池的创建1 public ThreadPoolExecutor(int corePoolSize,2 int转载 2017-09-24 16:02:24 · 250 阅读 · 0 评论 -
详解synchronized与Lock的区别与使用
引言:昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchronized的使用过程一些常见问题的总结,最后是参照源码和说明文档,对Lock的使用写了几个简单的Demo。请大家批评指正。12技术点:1、线程与进程:在开始之前先把进程与线程进行区分一转载 2017-09-24 15:56:07 · 880 阅读 · 0 评论 -
Lock和synchronized比较详解
今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章,注意红色字体。 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Ja转载 2017-09-24 15:55:32 · 281 阅读 · 0 评论 -
并发编程之ThreadLocal、Volatile、synchronized、Atomic关键字扫盲
前言对于ThreadLocal、Volatile、synchronized、Atomic这四个关键字,我想一提及到大家肯定都想到的是解决在多线程并发环境下资源的共享问题,但是要细说每一个的特点、区别、应用场景、内部实现等,却可能模糊不清,说不出个所以然来,所以,本文就对这几个关键字做一些作用、特点、实现上的讲解。1、Atomic作用对于原子操作类,Java的conc转载 2017-09-24 15:51:27 · 245 阅读 · 0 评论 -
JAVA多线程之线程间的通信方式
一,介绍本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码。 二,线程间的通信方式①同步这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。参考示例:public class MyObject { synchronized转载 2017-09-24 15:49:19 · 297 阅读 · 0 评论 -
Java多线程面试常见核心问题总结
1. 有T1、T2、T3三个线程,如何怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 使用join方法。 join方法的功能是使异步执行的线程变成同步执行。即调用线程实例的start方法后,该方法会立即返回,如果调用start方法后,需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这转载 2017-09-24 15:45:32 · 670 阅读 · 0 评论 -
基于redis分布式锁实现“秒杀”
最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。业务场景所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。一些可能的实现刚才提到转载 2017-09-06 10:03:44 · 378 阅读 · 0 评论 -
令牌桶算法
令牌桶算法(token bucket algorithm) 在实施QOS策略时,可以将用户的数据限制在特定的带宽,当用户的流量超过额定带宽时,超过的带宽将采取其它方式来处理。要衡量流量是否超过额定的带宽,网络设备并不是采用单纯的数字加减法来决定的,也就是说,比如带宽为100K,而用户发来的流量为110K,网络设备并不是靠110K减去100K等于10K,就认为用户超过流量转载 2017-09-06 10:02:30 · 2490 阅读 · 0 评论 -
线程的生命周期和状态控制
一、线程的生命周期线程状态转换图:1、新建状态用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。注意:不能对已经启动的线程再次调用start()方法,否则会出现Java.lang.IllegalThreadStateExcep转载 2017-08-09 12:40:52 · 307 阅读 · 0 评论 -
synchronized和volatile的使用方法以及区别
先看看下面的例子:public class ThreadTest { public static void main(String[] args) { final Counter counter = new Counter(); for (int i = 0; i ) { new Thread(new Runnable(转载 2017-10-17 21:02:01 · 300 阅读 · 0 评论