Java多线程
Deniece2017
这个作者很懒,什么都没留下…
展开
-
sleep和wait的区别
sleep和wait的区别还有:1. 这两个方法来自不同的类分别是Thread和Object2. 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。3. wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用synchronized(x){ x.notify() //或...转载 2019-02-25 15:00:50 · 74 阅读 · 0 评论 -
Java NIO详解
https://mp.weixin.qq.com/s?__biz=MjM5NzMyMjAwMA==&mid=2651478970&idx=1&sn=995321473129b47365a8de6c29b0e360&chksm=bd2537c58a52bed33d50e87799c6acbcf8bc05e93f5eac6e280319a97a7eeace5dec2a2...转载 2019-08-03 17:50:57 · 77 阅读 · 0 评论 -
Java线程池的几种实现及常见问题讲解
工作中,经常会涉及到线程。比如有些任务,经常会交与线程去异步执行。抑或服务端程序为每个请求单独建立一个线程处理任务。线程之外的,比如我们用的数据库连接。这些创建销毁或者打开关闭的操作,非常影响系统性能。所以,“池”的用处就凸显出来了。1. 为什么要使用线程池在3.6.1节介绍的实现方式中,对每个客户都分配一个新的工作线程。当工作线程与客户通信结束,这个线程就被销毁。这种实现方式有以下...转载 2019-03-04 17:32:57 · 392 阅读 · 0 评论 -
Java应用CPU占用100%原因分析
Java应用CPU占用100%原因分析:https://www.cnblogs.com/qiaoshanzi/p/5717275.html1 top命令查看CPU占用情况,获取到占用CPU较高的进程号2 ps -ef|grep 进程号 查看是否能找到对应的java服务2 ps -mp 进程号 -o THREAD,tid,time查看占用CPU较高的线程号,并将线程号转为16进制(prin...转载 2019-03-04 17:29:19 · 197 阅读 · 0 评论 -
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
阅读前提:本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识,文中不会对这些知识进行介绍。Java8 用到了红黑树,不过本文不会进行展开,感兴趣的读者请自行查找相关资料。Java7 HashMapHashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。...转载 2019-03-04 17:23:03 · 96 阅读 · 0 评论 -
哲学家就餐解决方案
哲学家就餐问题是1965年由Dijkstra提出的一种线程同步的问题。问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条。哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。上述问题会产生死锁的情况,当5个哲学家都拿起自己右手边的筷子,准备拿左手边的筷子时产生死锁现象。解决办法: 1、添加一个服务生,只有当经过服务生同意之后才能拿筷子,服务...转载 2019-03-04 11:12:19 · 300 阅读 · 0 评论 -
Java中synchronized的用法
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;...转载 2019-03-04 11:02:39 · 78 阅读 · 0 评论 -
Synchronized中偏向锁/自旋锁/轻量级锁/重量级锁的过程
synchronized的执行过程: 1. 检测Mark Word里面是不是当前线程的ID,如果是,表示当前线程处于偏向锁 2. 如果不是,则使用CAS将当前线程的ID替换Mard Word,如果成功则表示当前线程获得偏向锁,置偏向标志位1 3. 如果失败,则说明发生竞争,撤销偏向锁,进而升级为轻量级锁。 4. 当前线程使用CAS将对象头的Mark Word替换为锁记录指针,如果成功,当前...转载 2019-02-21 09:35:41 · 735 阅读 · 0 评论 -
ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的...转载 2019-02-21 08:51:47 · 89 阅读 · 0 评论 -
面试必问的CAS问题
CAS(Compare and Swap),即比较并替换,实现并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执行的安全性。CAS的思想很简单:三个参数,一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返回false。问题一个n++的问题。...转载 2019-02-21 08:47:25 · 1463 阅读 · 0 评论 -
让你弄懂生产者消费者模式
生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深。所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为;而消费者只需要从共享数据区中去获取数...转载 2019-02-20 15:21:29 · 136 阅读 · 0 评论 -
Java如何实现线程间通讯
正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarrier, FutureTask, Callable 等。本文涉及代码:https://gi...转载 2019-02-20 14:51:03 · 106 阅读 · 0 评论 -
15 个 Java 线程面试题和答案
多线程和并发问题已成为各种 Java 面试中必不可少的一部分。如果你准备参加投行的 Java 开发岗位面试,比如巴克莱银行(Barclays)、花旗银行(Citibank)、摩根史坦利投资公司(Morgan Stanley),你会遇到很多有关多线程的面试题。多线程和并发是投行面试的热门知识点,尤其是在面试有关电子交易开发工作时,他们喜欢用棘手的 Java 线程面试题轰炸面试者。他们希望确保面试者对...转载 2019-02-20 14:43:16 · 356 阅读 · 0 评论 -
Java线程池整理
一、如何构建线程池?我相信多数用过线程池的Java程序员都用过Executors来创建线程池,该类提供了几个静态方法,可以快速创建线程池。如上图所示,可以创建四种类型的线程池 固定线程数量的线程池。 根据需要创建线程的线程池。 执行定时任务的线程池。 单个线程的线程池。 多数情况下,这几种类型的线程池就能满足我们的需要。但是实际...翻译 2019-03-01 16:49:19 · 105 阅读 · 0 评论 -
面试场景关于锁及HashMap等
项目经验面试官在一开始会让你进行自我介绍,主要是想让你介绍一下自己做过的一些项目,看看你对这些项目的了解程度,因为很多人简历上写的项目并非都是从头到尾都参与的,有些只是参与并实现了其中的一些模块而已,或是接手维护别人的项目,所以在你简历上所写的和面试过程中所说的项目经验,你自己必须能够了解来龙去脉,因为面试官肯定会根据你的项目描述,对项目中的实现原理,或为什么要这样实现进行提问,这时不至...转载 2019-09-21 17:15:17 · 97 阅读 · 0 评论