自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

踟蹰千年的博客

码农一枚

  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

转载 解决debug到jdk源码时不能查看变量值的问题

如何跟踪jdk源码看到这个标题大概大家都会在心里想谁还跟踪个源码呀,在eclipse中打个断点,以debug的方式运行,然后F5进入方法,F6跳过方法,F7跳出方法。但是不知道大家有没有注意到,如果你跟踪到的是jdk源码的话,比如HashMap的put方法,即使你F5进入到这个方法的内部了,你也看不到你put的 key 和 value 的实际值。但是我们既然要跟踪源码,那么肯定要看到我们设置的...

2019-01-28 17:00:05 291

原创 线程基础(十三)线程池

转自http://www.cnblogs.com/dolphin0520/p/3932921.html如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。  那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?  在Java中可以通过线程池来达到这...

2019-01-28 11:04:40 118

原创 线程基础(十二)线程组

线程组可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式,如图所示: 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织。 线程关联线程组:1级关联所谓1级关联就是父对象中有子对象,但并不创建孙对象。这种情况在开发中很常见,比如创建一些线程时,为了有效对这些线程进行阻止管...

2019-01-24 14:34:53 218 1

原创 线程基础(十一)Timer

定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单、定时更新某些缓存、定时清理一批不活跃用户等等。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程方式进行处理,所以它和多线程技术关联还是相当大的。 Timer的schedule(TimeTask task, Date time)的使用该方法的作用是在执行的日期执...

2019-01-23 17:08:02 220

原创 线程基础(十)生产者/消费者模式 进阶 利用await()/signal()实现

利用await()/signal()实现生产者和消费者模型一样,先定义一个缓冲区:/* * 缓冲区 */public class Buffer { public static String buffer="";}package a_reentrantlock;import java.util.concurrent.locks.Condition;import jav...

2019-01-23 09:34:32 385

原创 线程基础(九)ReentrantReadWriteLock ,synchronized和ReentrantLock的对比

读写锁ReentrantReadWriteLock概述大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务),但是效率非常低。所以在JDK中提供了一种读写锁ReentrantReadWriteLock,使用它可以加快运行效率。读写锁表示两个锁,一个是读操作相关的锁,称为共享锁;另一个是写操作相关的锁...

2019-01-22 17:25:32 904 1

原创 线程基础(八)Reentrantlock重入锁

ReentrantLockReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。ReentrantLock基本用法/** * 重入锁 */public class ReentrantLockTest { int count =0; public static void mai...

2019-01-18 17:34:49 242

转载 哈希HashMap原理分析

 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录  一、什么是哈希表  二、H...

2019-01-18 09:52:47 162

原创 数据结构-Hash表基础

1.哈希表的定义  这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典,大家估计小学的时候也用过不少新华字典吧,如果我想要获取“按”字详细信息,我肯定会去根据拼音an去查找 拼音索引(当然也可以是偏旁索引),我们首先去查an在字典的位置,查...

2019-01-18 08:36:31 148

原创 线程基础(七)wait()和notify() 的生产者/消费者模式

什么是生产者/消费者模型一种重要的模型,基于等待/通知机制。生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点:1、生产者生产的时候消费者不能消费2、消费者消费的时候生产者不能生产3、缓冲区空时消费者不能消费4、缓冲区满时生产者不能生产生产者/模型作为一种重要的模型,它的优点在于:1、...

2019-01-17 18:21:22 277

原创 线程基础(六)wait() notify() notifyAll()

轮询线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作。想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处理?一个办法就是,B线程while(i == 10000),这样两个线程之间就有了通信,B线程不断通过轮训来检测i == 10000这个条件。这样可以实现我们的需求,但是也带来了问题:CPU把...

2019-01-16 19:11:32 261

原创 线程基础(五)死锁

死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜在的死锁。死锁的产生当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时,那么它们将...

2019-01-16 18:37:36 394

原创 线程基础 (五)无锁

无锁在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是vol...

2019-01-16 14:10:03 195 1

原创 线程基础 (四)Volatile可见性

Volatile实现变量可见性先看一个例子public class MyThread extends Thread{ private boolean isRunning=true; public boolean isRunning() { return isRunning; } public void setRunning(boolean isRunning) {...

2019-01-16 12:56:23 965

原创 线程基础(二)线程的中断interrupt

 JAVA中有3种方式可以终止正在运行的线程①线程正常退出,即run()方法执行完毕了②使用Thread类中的stop()方法强行终止线程。但stop()方法已经过期了,不推荐使用③使用中断机制interrupt()1.stop()方法stop()在java多线程中已经废弃1.stop()方法会导致释放锁的不良后果,数据不完整比如一个上锁了得方法:threadA...

2019-01-15 17:27:56 267

原创 线程基础(一)线程中的方法

Thread类中的实例方法从Thread类中的实例方法和类方法的角度讲解Thread中的方法,这种区分的角度也有助于理解多线程中的方法。实例方法,只和实例线程(也就是new出来的线程)本身挂钩,和当前运行的是哪个线程无关1、start()start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果p...

2019-01-15 14:24:32 254

原创 Activiti工作流(六)用户任务(userTask,即用户操作的任务)

个人任务流程图 分配个人任务方式一(直接指定办理人)1:流程图中任务节点的配置 2:测试代码:ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//部署流程定义,启动流程实例    @Test    public void testTask() throws Exceptio...

2019-01-09 19:52:20 15462 1

原创 Activiti工作流(五)连线,排他网关,并行网关,等待活动

流程图如图绘制流程图 连线属性设置部署流程定义+启动流程实例 @Test public void TestSequenceFlow(){ //获取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); Deployment deployment = pr...

2019-01-08 18:27:54 1853

原创 Activiti工作流(四)流程变量

一传递参数设置流程变量说明:流程变量的作用域就是流程实例,所以只要设置就行了,不用管在哪个阶段设置 基本类型设置流程变量,在taskService中使用任务ID,定义流程变量的名称,设置流程变量的值。 Javabean类型设置流程变量,需要这个javabean实现了Serializable接口 设置流程变量的时候,向act_ru_variable这个表添加数据 获取流程...

2019-01-08 15:54:57 924 1

原创 关于各种路径问题归纳 classpath等

//从classPath根目录下加载指定名称文件InputStream inputStream1 = this.getClass().getResourceAsStream("/diagrams/ProcessVariables.png");//从当前类所在包下加载指定名称文件InputStream inputStream2 = this.getClass().getResourceAsS...

2019-01-08 14:28:16 379

原创 Activiti工作流(三)23张表的含义

了解23张表Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。  ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据。 ...

2019-01-07 18:50:58 3771

原创 Activiti工作流(二)基础入门

先利用eclipse安装好的流程图绘制插件绘制一个审批流程分别设置assignee(分配到任务的人) 为张三,李四,王五这是xml文件 反映上图流程连接关系<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" ...

2019-01-07 17:34:25 423

原创 Activiti工作流(一)环境配置

下载与目录结构官网:https://www.activiti.org/  目录结构如下:database :提供了建表语句。docs:该目录包含了三种文档:javadocs、userguide、xsd。javadocs:API文档,包名按照功能模块划分,org.activiti.engine.*。 userguide:用户手册,包含环境配置、10分钟快速入门以及各个功能模...

2019-01-07 16:29:37 609

原创 ZTREE入门

官网下载http://www.treejs.cn/v3/api.php初始化树<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <!--<link rel="styles

2019-01-07 15:12:24 194

Java面试资源“80%的offer掌握在20%的人手中”

“80%的offer掌握在20%的人手中” 这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部 分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万 不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来 越强大。

2019-04-25

RabbitMQ安装包

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等

2018-09-11

空空如也

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

TA关注的人

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