自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(16)
  • 收藏
  • 关注

转载 java高并发系列 - 第16天:JUC中等待多线程完成的工具类CountDownLatch,必备技

这是java高并发系列第16篇文章。本篇内容介绍CountDownLatch及使用场景提供几个示例介绍CountDownLatch的使用手写一个并行处理任务的工具类假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要统计解析总耗时。分析一下:解析每个sheet耗时可...

2019-07-24 11:37:03 171

转载 java高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能

这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以同时访问特定的资源。Semaphore常用场景:限流举个例子:比如有个停车场,有5个空位,门口有个门卫,手中5把钥匙分别对应5个车位上...

2019-07-24 11:35:52 510

转载 java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能

这是java高并发系列第14篇文章。本文主要内容:讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例介绍LockSupport主要用法对比3种方式,了解他们之间的区别LockSupport位于java.util.concurrent(简称juc)包中,算是juc中一个基础类,juc中很多地方都会使用LockSupport,非常重要,希望大家一定要掌握。关于线程等待/唤醒的方法,...

2019-07-24 11:34:19 153

转载 java高并发系列 - 第13天:JUC中的Condition对象

本文目标:synchronized中实现线程等待和唤醒Condition简介及常用方法介绍及相关示例使用Condition实现生产者消费者使用Condition实现同步阻塞队列Object对象中的wait(),notify()方法,用于线程等待和唤醒等待中的线程,大家应该比较熟悉,想再次了解的朋友可以移步到线程的基本操作synchronized中等待和唤醒线程示例package ...

2019-07-24 11:30:14 287

转载 java高并发系列 - 第12天JUC:ReentrantLock重入锁

java高并发系列 - 第12天JUC:ReentrantLock重入锁本篇文章开始将juc中常用的一些类,估计会有十来篇。synchronized的局限性synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁由jvm实现,用户不需要显示的释放锁,非常方便,然而synchronized也有一定的局限性,例如:当线程尝试获取锁的时...

2019-07-24 11:06:25 85

转载 java高并发系列 - 第11天:线程中断的几种方式

java高并发系列第11篇文章。本文主要探讨一下中断线程的几种方式。通过一个变量控制线程中断代码:package com.itsoku.chat05;import java.util.concurrent.TimeUnit;/** * 微信公众号:javacode2018,获取年薪50万课程 */public class Demo1 { public volatil...

2019-07-24 11:04:02 160

转载 java高并发系列 - 第10天:线程安全和synchronized关键字

这是并发系列第10篇文章。什么是线程安全?当多个线程去访问同一个类(对象或方法)的时候,该类都能表现出正常的行为(与自己预想的结果一致),那我们就可以所这个类是线程安全的。看一段代码:package com.itsoku.chat04;/** * 微信公众号:javacode2018,获取年薪50万课程 */public class Demo1 { static int ...

2019-07-24 11:01:25 71

转载 java高并发系列 - 第9天:用户线程和守护线程

守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,java虚拟机会自动退出。java线程分为用户线程和守护线程,线程的daemon属性为tr...

2019-07-24 10:58:25 97

转载 java高并发系列 - 第8天:线程组

线程组我们可以把线程归属到某个线程组中,线程组可以包含多个线程以及线程组,线程和线程组组成了父子关系,是个树形结构,如下图:使用线程组可以方便管理线程,线程组提供了一些方法方便方便我们管理线程。创建线程关联线程组创建线程的时候,可以给线程指定一个线程组,代码如下:package com.itsoku.chat02;import java.util.concurrent.TimeUn...

2019-07-24 10:54:13 124

转载 java高并发系列 - 第7天:volatile与Java内存模型

public class Demo09 { public static boolean flag = true; public static class T1 extends Thread { public T1(String name) { super(name); } @Override ...

2019-07-24 10:52:22 59

转载 java高并发系列 - 第6天:线程的基本操作,必备技能

新建线程新建线程很简单。只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可。Thread thread1 = new Thread1();t1.start();那么线程start()之后,会干什么呢?线程有个run()方法,start()会创建一个新的线程并让这个线程执行run()方法。这里需要注意,下面代码也能通过编译,也能正常执行。但是,却不能新建一个线程...

2019-07-24 10:49:30 103

转载 java高并发系列 - 第5天:深入理解进程和线程

进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程具有的特征:动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的并发性:任何进程都可以同其他进行一起并发执行独立性:进程是系统进行资源分配和调度的一个独立单位结构性:进程...

2019-07-24 10:44:27 66

转载 java高并发系列 - 第4天:JMM相关的一些概念

JMM(java内存模型),由于并发程序要比串行程序复杂很多,其中一个重要原因是并发程序中数据访问一致性和安全性将会受到严重挑战。如何保证一个线程可以看到正确的数据呢?这个问题看起来很白痴。对于串行程序来说,根本就是小菜一碟,如果你读取一个变量,这个变量的值是1,那么你读取到的一定是1,就是这么简单的问题在并行程序中居然变得复杂起来。事实上,如果不加控制地任由线程胡乱并行,即使原本是1的数值,你也...

2019-07-24 10:41:28 79

转载 java高并发系列 - 第3天:有关并行的两个重要定律

有关为什么要使用并行程序的问题前面已经进行了简单的探讨。总的来说,最重要的应该是处于两个目的。第一,为了获得更好的性能;第二,由于业务模型的需要,确实需要多个执行实体。在这里,我将更加关注第一种情况,也就是有关性能的问题。将串行程序改造为并发程序,一般来说可以提高程序的整体性能,但是究竟能提高多少,甚至说究竟是否真的可以提高,还是一个需要研究的问题。目前,主要有两个定律对这个问题进行解答,一...

2019-07-24 10:38:41 81

转载 java高并发系列 - 第2天:并发级别

由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,我们可以把并发的级别分为阻塞、无饥饿、无障碍、无锁、无等待几种。阻塞一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使用synchronized关键字或者重入锁时,我们得到的就是阻塞的线程。synchronize关键字和重入锁都试图在执行后续代码前,得到临界区的锁,如果得不到,线程就会被挂起等待,直...

2019-07-24 10:35:21 87

转载 java高并发系列 - 第1天:必须知道的几个概念

同步(Synchronous)和异步(Asynchronous)同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中“真实”地执行。整个过程,不会阻碍调用者的工作。如图:上图中显示了同步方法调用和异步方法调用的区别。...

2019-07-24 10:31:46 73

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除