自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 leetCode网多线程题目之交替打印FooBar

leetCode网多线程题目之交替打印FooBar。采用信号量的方式来解决此问题,网上还有使用Lock + volatile + Condition的方式实现。题目链接:https://leetcode-cn.com/problems/print-foobar-alternately/题目原文:我们提供一个类:class FooBar { public void foo() { ...

2020-01-02 09:36:49 246

原创 idea快捷开发,你还在犹豫吗

idea之所以强大,就在于它的智能提示真的很好用。下面就给大家提供一些平常开发中用到的自定义模板快捷键。首先ctrl + alt + s 弹出设置窗,选择 Editor -> Code Style -> Live Templates我们可以看到很多平常用的快捷键都在iterations 和 other 这两个群组里面设置的。点击右上角+号,选择Template Group,为...

2019-12-25 15:59:51 217

原创 CyclicBarrier源码解析

CyclicBarrier也被称之为循环栅栏,是JUC中提供的一个同步工具类,用于解决某些需要指定现场到达某个屏障点才能继续执行后续操作的场景。一个简单的demo示例。声明一个等待线程为5的栅栏,声明8个线程去执行,当第5个线程到达栅栏时,将会唤醒前4个等待的线程,这5个线程将执行自己的任务。CyclicBarrier将会开启下一代(新栅栏),剩余三个线程将会在新栅栏处等待,直到第5个线程到达将...

2019-12-17 13:37:30 372

原创 CountDownLatch源码解析

一、概念CountDownLatch可以使一个线程等待指定数量的其他线程都执行完毕后再执行。CountDownLatch 是基于共享锁实现的,初始的时候声明一个state数量的同步器,这个state可以理解为拥有锁的线程数量,当调用await()方法时,当前线程会去尝试获取共享锁,只有当state值为0时才能获取锁成功,否则会阻塞,才能继续执行下面代码。通俗理解,声明一个指定线程数量的计数...

2019-12-16 16:20:34 376

转载 归并排序——很容易理解的一篇文章

[图解] 归并排序1. 图示过程(1) 归并排序的流程(2) 合并两个有序数组的流程2. 动图展示3. Java代码实现public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1);}public static void sort(int[] arr,...

2019-12-13 10:36:04 297

原创 JUC中Exchanger使用示例

package com.ywu.demo.normal.juc;import java.util.concurrent.Exchanger;/** * @description * @author wuya * @date 2019/12/12 */public class ExchangerDemo { public static void main(String[]...

2019-12-12 13:58:40 399

原创 阻塞队列ArrayBlockingQueue源码解析

ArrayBlockingQueue基于数组的数据结构实现,在其内部,维护了一个定长数组,以便缓存队列中的数据对象,这是一个常用的阻塞队列,除了一个定长数组外,ArrayBlockingQueue内部还保存着两个整形变量,分别标识着队列的头部坐标 takeIndex (消费数据坐标) 和尾部坐标 putIndex (生产数据坐标)。ArrayBlockingQueue也被称为有界阻塞队列,顾名思...

2019-12-12 11:01:57 329

原创 IDEA在当前工作空间导入项目

在使用idea时,当你需要新导入一个项目,但是却不想切换project时你可以这么做。点击右上角该按钮选择Project Setting 下Modules点击 + 号,选择Import Module选择项目路径后,就可以一直next就行了,当然也可以自己设置一些选项。...

2019-12-11 16:59:18 2062

原创 设计模式之责任链模式

在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。在计算机软硬件中也有相关例...

2019-12-10 10:52:47 454

原创 java多线程Phaser使用

背景某一天,小明跟五个嫂子玩游戏(羡煞我也),游戏共三关,这个游戏小明都是轻车熟路,每次都是第一个完成,但是为了照顾几个嫂子,体现一下绅士风度,得等嫂子们都完成才能继续下一关的探索啊。那怎么办呢,小明绞尽脑汁,想到了CountDownLatch和CyclicBarrier来解决这个问题。但是过了一会发现这两个不太好使,这该怎么办呢,这种关键时刻可不能掉链子,于是想啊想,查啊查,终于发现了JUC...

2019-12-03 14:57:47 403

原创 NIO线程模型

NIO线程模型  以前对NIO线程模型的概念比较模糊,通过这篇文章基本了解了NIO线程模型。下面来介绍下服务器端基于IO模型和自身线程的处理方式。一、传统阻塞IO模型下的线程处理模式这种处理模型是基于阻塞IO进行的,上一篇讲过,阻塞IO会阻塞每一个IO操作,直到事件就绪,下面来看下阻塞IO下的服务端线程模型:图1如上图所示,该线程模型基于阻塞IO模型实现,针...

2019-11-27 11:33:52 577

原创 TCP状态详解

TCP的11种状态TCP三次握手建立连接Tcp头部  六个标志位中,我们要用到三个: SYN:SYN= 1 表示这是一个连接请求或连接接受报文。在建立连接时用来进行同步序号(个人理解是,在建立连接的时候,提醒对方记录本方的起始序号)。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若是同意建立连接,则应响应的报文段中使SY...

2019-11-27 11:17:01 363

原创 利用AQS实现自定义锁

利用AQS实现自定义锁,只需要自定义实现一个同步器,重写AQS中两个方法tryAcquire和tryRelease,如果是共享锁的话则只需重写tryAcquireShared和tryReleaseShared两个方法,如果需要实现Condition效果则需要另外重写isHeldExclusively方法。 这里只是简单的实现了自定义独占锁的效果,只提供了加锁和解锁两个方法。...

2019-11-20 13:56:09 395

原创 BlockingQueue(阻塞队列)详解

BlockingQueue(阻塞队列)详解 注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。一. 前言  在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全...

2019-11-19 14:09:36 374

原创 浅谈偏向锁、轻量级锁、重量级锁

首先说一下锁的优化策略。1,自旋锁自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁。因为一般敏感的操作不会很多。当然这个是一个不能完全确定的情况,只能说总体上是一种优化。举个例子就好比一个人要上厕所发现厕所里面有人,他可以:1,等一小会...

2019-11-19 11:09:48 303

原创 使用Google guava记录时间

导入guava依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> ...

2019-11-12 14:43:33 2502

原创 Druid拦截sql语句,实现在添加一个查询条件

Druid拦截sql语句,实现在添加一个查询条件这里就不详细描述原理了。首先需要重写一下FilterEventAdapter里的connection_prepareStatement方法,然后对sql进行解析,根据不同情况添加where查询条件。package com.spek.base.filter;import java.sql.SQLException;impor...

2019-05-30 16:04:54 8949 10

空空如也

空空如也

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

TA关注的人

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