Java并发编程
本专栏总结日常开发中遇到的java并发问题
爱写Bug的麦洛
与其等待未来,不如创造未来
展开
-
高并发,你真的理解透彻了吗?
转自: 公众号:IT人的职场进阶 作者: 骆俊武 支持原创,喜欢的关注上面的公众号 高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。 在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类: 1、对数据化的指标没有概念 不清楚选择什么样的指标来衡量高并发系统?分不清并..转载 2020-06-30 22:20:28 · 632 阅读 · 0 评论 -
Java并发编程(总目录)
一.Java多线程原创 2019-04-23 16:57:55 · 1763 阅读 · 2 评论 -
Java中各种锁的详解
导读 今天和同事探讨多线程中的锁问题,发现我对这方面了解太少了,像我这么热爱学习的人(其实单身狗除了写博客也没其他可做的),决定梳理一下java中的各种锁 一. synchronized 在 JDK 1.6 之前,synchronized 是重量级锁,效率低下。 从 JDK 1.6 开始,synchronized 做了很多优化,如偏向锁、轻量级锁、自旋锁、适应性自旋锁、锁消除、锁粗化等技术来...原创 2019-05-03 15:18:00 · 1416 阅读 · 0 评论 -
线程的生命周期详解
导读 与人有生老病死一样,线程也同样要经历开始(等待)、运行、阻塞和结束四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。 一.线程的状态 线程可以分为5个状态: New(新建) Runnable(就绪) Running(运行) blocked(被阻塞) Dead(死亡) 二.线程状态详解 1.New(新建) 当创建Thread类的一个实例(对象)时,此线程进入新建状态...原创 2019-05-03 15:17:37 · 452 阅读 · 0 评论 -
Java中的锁之重入锁:ReentrantLock
一.什么是重入锁 顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。原创 2019-05-03 15:17:18 · 627 阅读 · 0 评论 -
ThreadPoolExecutor线程池的实现原理
当向线程池提交一个任务之后,线程池是如何处理这个任务的呢?原创 2019-05-03 15:16:27 · 433 阅读 · 0 评论 -
ThreadPoolExecutor线程池的使用
一.线程池的创建 我们可以通过ThreadPoolExecutor的构造函数来创建一个线程池。 new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler); 创建一个线程池时需要输入几个参数,如下。 1)corePo...原创 2019-05-03 15:15:36 · 507 阅读 · 0 评论 -
为什么要使用ConcurrentHashMap
在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。 一.线程不安全的HashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,执行以下代码会引起死循环。 final Has...原创 2019-05-03 15:16:45 · 869 阅读 · 0 评论 -
Java内存模型之happens-before
导读 happens-before是JMM最核心的概念。对应Java程序员来说,理解happens-before是理解JMM(Java内存模型)的关键 一.happens-before的简介 由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见? 我们无法就所有场景来规定某个线程修改的变量何...原创 2019-05-03 15:17:47 · 481 阅读 · 0 评论 -
Java内存模型的抽象结构
一. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型之前,先简单介绍一下硬件的效率与一致性。 二.硬件的效率与一致性 由于计算机的存储设备与...原创 2019-05-03 15:18:12 · 761 阅读 · 0 评论 -
Java中的锁之Lock接口
一.Lock接口简介 首先,我们一睹尊容: 在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是...原创 2019-05-03 10:56:05 · 414 阅读 · 0 评论 -
如何安全的终止线程
导读 在日常开发中,我们如何终止一个线程,才是安全的? 一.线程中断机制介绍 JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程。但stop()方法已经过期了,不推荐使用 ③使用中断机制 那么,为什么stop()方法不推荐使用? 因为stop()方法在终结一个线程时不会保证线程的资源正常释放,通常是没有...原创 2019-05-02 11:23:26 · 3814 阅读 · 5 评论 -
Java多线程的创建和启动
导读 闲暇周末,怎能懒惰?乘此风和日丽之日,来死磕一下java多线程的创建和启动 一.继承Thread类和重写run()方法 public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } ...原创 2019-04-24 15:39:27 · 745 阅读 · 0 评论 -
Thread类相关的API介绍
导读 Thread类作为java多线程的基类,那么你们了解与它相关的API吗?下面我们来一探究竟! 一.准备工作 在开始学习之前,我们先建一个类:ThreadApiTest,接下来我们将在此类中测试相关API; public class ThreadApiTest { public static class MyThread extends Thread{ pr...原创 2019-04-23 21:19:44 · 492 阅读 · 1 评论 -
Java多线程的概念和原理
一、操作系统中线程和进程的概念 要理解线程,首先要理解并发的概念。并发是指在同一时间点,计算机可以同时执行多个任务。当前主流的操作系统,不管是Window系统,还是Linux系统,都是以多任务执行程序的。例如,我们可以在编写Java代码的同时听音乐、发送电子邮件等。 在多任务系统中,每个独立执行的任务(应用程序)称为进程,多个任务可以并发执行。下图是Windows 7系统任务管理器中的进程,从...原创 2019-04-23 17:32:54 · 514 阅读 · 0 评论