随笔分类 - java
摘要:一、问题描述 项目中通过配置Context节点docBase,使docBase指向项目的绝对路径,可以直接通过IP加端口访问,今日发现意外bug,项目中某个功能奇数次执行成功,偶数次执行失败。二、问题排查 这种现象应该是两次使用的为不同的对象,通过debug确认问题。但是本来是单例模式实现的实例,调
阅读全文
摘要:一、protobuf应用场景 protobuf 在Java中的应用场景可以是序列化和反序列化,流可以通过文件或者通过网络TCP/UDP等方式传输。新建一个.proto文件 二、注意事项1、使用proto3,必须显示申明:syntax = "proto3" ,否则使用proto22、生成的Java类的
阅读全文
摘要:一、什么是Google Protocol Buffer下面是官网给的解释:Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data. –
阅读全文
摘要:前面一篇文章《wait、notify应用场景(生产者-消费者模式)》是一种生产者消费者模式实现,今晚这是Lock方式实现,下面是源码: 生产者代码: 消费者代码: 测试代码: ReentrantLock 公平锁和非公平锁 非公平锁:获取锁的方式是抢占式的,随机的。默认ReentrantLock()是
阅读全文
摘要:一、ReentrantLock (1)、java.util.concurrent.locks包中的ReentrantLock就是重入锁,它实现了Lock接口,Lock加锁和解锁都是显示的。ReentrantLock重入锁可以实现synchronized关键字的功能。主要方法:lock:获得锁。unl
阅读全文
摘要:join()的作用:Waits for this thread to die.等待线程对象销毁。在Thread源码中可以看到join源码是使用了wait()方法来实现等待功能。 因为join()内部使用了wait()方法实现,wait方法被调用后线程会释放锁,因此join方法也具有释放锁的特点。 这
阅读全文
摘要:Java实现生产者消费者的方式有:wait && notify、BlockingQueue、Lock && Condition等 wait、notify注意事项:(1)可以使用wait()和notify()方法在Java中实现线程间通信。不只是一个或两个线程,而是多个线程可以使用这些方法相互通信。(
阅读全文
摘要:wait/notify机制 实现多个线程之间的通信可以使用wait、notify、notifyAll三个方法。这三个方法都是Object类的方法。wait():导致当前线程等待,直到另一个线程调用此对象的 notify()方法或 notifyAll()方法。wait(long timeout):导致
阅读全文
摘要:Java中自增自减操作不具原子性,在多线程环境下是线程不安全的,可以使用使用AtomicInteger原子类代替i++,i--操作完成多线程线程安全操作。 下面是等于i++多线程的自增操作代码: incrementAndGet()方法源码(JDK1.8):
阅读全文
摘要:Java内存模型是围绕在并发过程中如何处理原子性、可见性、有序性来建立的。 一、主内存与工作内存 Java内存模型主要目标是在虚拟机中将变量存储到内存和从内存中取出变量。这里的变量包括:实例字段、静态字段、构成数组对象的元素;不包括局部变量和方法参数,因为它们是线程私有的。Java内存模型规定了所有
阅读全文
摘要:Java虚拟机在执行java程序时会把内存划分为以下几个不同的数据区域: java虚拟机内存划分(运行时)1、线程私有的: 程序计数器(Program Counter Register):可以看作当前线程所执行的字节码的行号指示器。java多线程中一个时刻,一个处理器都只会执行一条线程中的指令,在线
阅读全文
摘要:一.synchronized java并发编程中存在“非线程安全"问题。“非线程安全"是指发生在多个线程对同一个对象中的实例变量并发访问时,产生的”脏读“现象,使用synchronized同步处理可解决这一问题。非线程安全问题存在于实例变量中,不存在方法内部的私有变量。 1、synchronized
阅读全文
摘要:1、线程优先级 Thread源码优先级定义1-10 /** * The minimum priority that a thread can have. */ public final static int MIN_PRIORITY = 1; /** * The default priority t
阅读全文
摘要:下面题目是LeetCode算法:逆波兰表达式求值(java实现) 逆波兰表达式即后缀表达式。 题目: 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式、同时支持括号。(假设所有的数字均为整数,不考虑精度问题) 计算工具: 测试:
阅读全文
摘要:NIO 重要功能就是实现多路复用。Selector是SelectableChannel对象的多路复用器。一些基础知识: 选择器(Selector):选择器类管理着一个被注册的通道集合的信息和它们的就绪状态。 可选择通道(SelectableChannel):这个抽象类提供了实现通道的可选择性所需要的
阅读全文
摘要:b.打开SocketChannel: c.打开ServerSocketChannel 2.使用通道 b.在两个通道中复制数据: c.注意:一个连接到只读文件的 Channel 实例不能进行写操作,即使该实例所属的类可能有 write( )方法;FileChannel 实现 ByteChannel 下
阅读全文
摘要:Buffer就是一个数据存储器。数据可以存储在其中并在之后用于检索。 在Buffer的源码中可以看到: 这四个就是缓冲区的重要属性。 容量(Capacity):缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变。 上界(Limit):缓冲区的第一个不能被读或写的元素
阅读全文
摘要:复习NIO知识,权当做笔记~~ 在NIO之前先复习一下 1、I/O类简图 2、通常我们把网络通信也归到IO行为中,例如网络编程中的scoket通信。 不管是磁盘I/O,还是网络I/O,数据在写入OutputStream和从InputStream中读取数据都可能发生阻塞即BIO,一旦阻塞,线程就失去C
阅读全文
摘要:下面题目是LeetCode算法155题: https://leetcode.com/problems/min-stack/ 题目1:最小函数min()栈 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 x 推入栈中。 pop() --
阅读全文
摘要:今天在项目稳定性测试过程中遇到一个情景:通过工具jMeter一直请求消息转发服务器,消息转发服务器再向rabbitMQ发送数据,在这期间出现了问题、MQ意外宕机。 1. 查看rabbitMQ管理界面。如下图、rabbitMQ连接数不断往上涨。 2.初步定为为代码问题、通过分析工具代码发现: 项目中每
阅读全文

浙公网安备 33010602011771号