
Java
大师兄啊
做你自己想做的事~
展开
-
《菜鸟读并发》一文读懂Synchronize锁优化过程
概念随着JVM的升级,几乎不需要修改代码,就可以直接享受JVM在内置锁上的优化成果。从简单的重量级锁,到逐渐膨胀的锁分配策略,使用了多种优化手段解决隐藏在内置锁下的基本问题。我们来回顾一下,新版的锁的类型一共有四种状态:无锁、偏向锁、轻量级锁、重量级锁,它会随着竞争情况逐渐升级.锁可以升级但是不可以降级,目的是为了提供获取锁和释放锁的效率。锁的四个状态JDK 1.6 引入了偏向锁和轻量...原创 2020-02-28 22:37:36 · 34300 阅读 · 0 评论 -
《菜鸟读并发》java内存模型之final
final 关键字的字面意思是最终的,不可修改的。这似乎是一个看见名字就大概知道怎么用的语法,但你是否有深究过final在各个场景中的具体用法,注意事项,以及背后涉及的Java设计思想呢?final可以修饰什么类成员变量方法被final修饰的类并不可以被继承,所以到这里我们就能知道String类是不能被继承的。而且被final 修饰的类所有成员方法都将被隐式修饰为final方法...原创 2020-02-28 22:37:40 · 34450 阅读 · 0 评论 -
《菜鸟读并发》java内存模型之happen-before
面试题:happen-before的八个基本规则你知道吗?Happens-BeforeHappens-Before真正要表达的是:前面一个操作的结果对后续操作是可见的。就像有心灵感应的两个人,虽然远隔千里,一个人心之所想,另一个人都看得到。Happens-Before 规则就是要保证线程之间的这种“心灵感应”。Happens-Before原则它是判断数据是否存在竞争、线程是否安全的主...原创 2020-02-28 22:37:27 · 34171 阅读 · 0 评论 -
《菜鸟读并发》java内存模型之volatile关键字初识
在阅读本文前,请思考以下的面试题?volatile是什么?volatile的特性volatile是如何保证可见性的?volatile是如何保证有序性的?volatile可以保证原子性吗?使用volatile变量的条件是什么?volatile和synchronized的区别volatile和atomic原子类的区别是什么?这一章主要是讲解volatile的原理,在开始本文前...原创 2020-02-28 22:37:24 · 34268 阅读 · 0 评论 -
《菜鸟读并发》深入浅出Synchronized关键字
synchronized关键字JDK 1.5之前的synchronized关键字,锁被称之为重量级锁synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的。其底层依赖监视器监视器又依赖操作系统底层的互斥锁1.6之后为了减少获得锁和释放锁带来的性能开销而引入偏向锁和轻量级锁,优化之后原来越强大了,这也是官方建议使用synchronized的原因...原创 2020-02-28 22:37:33 · 34138 阅读 · 0 评论 -
《菜鸟读并发》多线程程序问题如何调试?
多线程程序问题如何调试?出了 Bug 基本上都是靠日志,靠线程dump来跟踪问题分析线程dump的一个基本功就是分析线程状态,大部分的死锁、饥饿、活锁问题都需要跟踪分析线程的状态。你可以通过jstack命令或者VisualVM这个可视化工具将JVM所有的线程栈信息导出来,完整的线程栈信息不仅包括线程的当前状态、调用栈,还包括了锁的信息例如一个死锁的程序,导出的线程栈明确告诉我发生了死锁,...原创 2020-02-28 22:37:15 · 34437 阅读 · 0 评论 -
《菜鸟读并发》vmstat可以测量线程上下文切换的次数
什么是vmstat概念:vmstat测量上下文切换的次数,vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的C...原创 2020-02-28 22:37:17 · 35662 阅读 · 0 评论 -
《菜鸟读并发》并发编程三个核心问题和三个主要BUG源头你知多少?
并发编程的第一原则,那就是不要写并发程序,所以编写正确的并发程序是一件极困难的事情,但要快速而又精准地解决“并发”类的疑难杂症,就要理解这件事情的本质,追本溯源,深入分析这些Bug的源头在哪里。并发编程三个核心问题和三个主要BUG源头,思维导图如下:前戏我们知道我们的的CPU、内存、I/O设备都在不断快速的迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个核心矛盾一直存...原创 2020-02-28 22:37:21 · 34120 阅读 · 0 评论 -
《菜鸟读并发》什么是线程死锁,怎么解决线程死锁
面试题什么是线程死锁,?产生死锁的四个必要条件?解决线程死锁的办法是什么?如何避免死锁?什么是线程死锁?首先是一个线程需要多把锁,并发的时候多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状...原创 2020-02-28 22:37:09 · 34140 阅读 · 0 评论 -
《菜鸟读并发》并发编程必知必会概念
什么是进程?系统运行程序的基本单位程序的一次执行过程,系统运行一个程序即是一个进程从创建,运行到消亡的过程,所以进程是动态的任务管理器中window 当前运行的进程都是以.exe 为后缀的在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程什么是线程?线程是一个比进程更小的执行单位(...原创 2020-02-28 22:33:49 · 34175 阅读 · 0 评论 -
最全面的ReentrantReadWriteLock读写锁源码解读,逐行注释,多图描述,还看不懂算我输!
初读ReentrantReadWriteLock位于 java.util.concurrent.locks 包下,它实现了 ReadWriteLock 接口和 Serializable 接口ReentrantReadWriteLock读写锁在ReentrantLock上进行了拓展读写锁是“读写互斥,写写互斥,读读共享” 的锁读锁和写锁共用同一个 原子state 和 On Sync Que...原创 2020-01-15 22:56:53 · 34571 阅读 · 0 评论 -
设置虚拟机和主机共享网络(NAT模式)
首先我们要添加一个网络适配器右键——属性——IPV4自定义分配一个网段:192.168.11.1 子网掩码为:225.225.225.0之后重启适配器选择我们刚刚创建的VMware8,子网地址是192.168.11.0 子网掩码为:225.225.225.0然后我们选择NAT模式自定义分配一个IP:192.168.11.2接下来如果我们想要我们的虚拟机每次打开的时候i...原创 2019-09-29 10:59:01 · 42013 阅读 · 0 评论 -
一文带你全面认识ThreadLocal源码最详细解读(内容附带真实案例加源码分析)
目录:什么是ThreadLocal ThreadLocal使用示例 真实案例剖析 深入ThreadLocal源码 ThreadLocal为什么会内存泄漏 总结什么是ThreadLocal?ThreadLocal是Java里一种特殊的变量。有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下...原创 2019-09-22 13:55:58 · 35374 阅读 · 1 评论 -
对一个二维数组进行冒排序
//创建一个二维的数据,进行冒泡排序(原理和一位数组的排序是一样的,首先数组有n个元素,那么用//冒泡排序要比较n-1次,如果我们把二维数组转化成以为数组的话,我们可以对比一下他们的下标//(二维数组的话是一个三行三列的,所以row=3,col=3)// a[0]=a[0][0]// a[1]=a[0][1]// a[2]=a[0][2]// a[3]=a[1]原创 2015-11-24 20:59:54 · 35601 阅读 · 0 评论 -
懒加载异常处理
今天聊到Hibernate的懒加载异常和1+N问题。这两个应该是java面试必问的问题,好了,废话不说了,我们来看看这两个问题。什么是懒加载? 答:在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了。 我们所说的懒加载原创 2015-11-22 12:03:36 · 35734 阅读 · 0 评论 -
Java中类实现接口要实现父类里面的全部的方法和属性吗?
Java中类实现接口要实现父类里面的全部的方法和属性吗?原创 2015-11-28 23:33:26 · 37577 阅读 · 0 评论 -
将Logger的数据导入到数据库详解
昨天公司说要在系统中添加日志查询统计功能,刚开始第一个念头就是用IO流读取日志文件,然后持久化,最后在系统中查询。结果看了一些LOG4J的说明文档后发现,原来LOG4J本身就有将日志信息存入数据库功能,这样就大大节省了开发的时间。现在把方法记录下来,希望对有需要的朋友有所帮助。一、前提条件 系统必须是使用LOG4J进行日志管理,否则方法无效。 系统必须包含commo原创 2016-09-11 16:23:15 · 37302 阅读 · 0 评论 -
jdbc连接池详解
t通过读取配置文件propertise来获取连接词的url,username,password ResourceBundle init = ResourceBundle.getBundle("config.demo.demo-jdbc");String driver = init.getString("jdbc.driver");String url原创 2016-09-11 16:48:45 · 35263 阅读 · 0 评论 -
通过webSocket实现app产生的数据在网页实时显示
一概述## 在项目中有这样一个需要,app为智能心电跑步类app,在跑步时需要在网页端显示用户的跑步信息,包括跑步时长、心率、心电图等,其中心电图是需要实时更新的。当用户开始跑步时在网页上显示这些信息,跑步结束时结束实时数据显示,将最终跑步结果显示在网页时,效果图如下:在网页上的显示效果如下:先做个大致的分析,数据要做到实时显示,需要将app产生的数据通过网络发送到服务器...转载 2018-08-11 13:16:12 · 47631 阅读 · 0 评论 -
【最新面试系列之消息中间件】你们的系统架构中为什么要引入消息中间件?
这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题。假如面试官看你简历里写了MQ中间件的使用经验,很可能会有如下问题:* 你们公司生产环境用的是什么消息中间件?为什么用这种?* 为什么要在系统里引入消息中间件?* 引入消息中间件之后会有什么好处以及坏处?好,我们一个个的来分析!1.你们公司生产环境用的是什么消息中间件?这个首先...原创 2019-09-01 21:39:45 · 35916 阅读 · 0 评论 -
Java程序员必会的常用Linux命令大全
系统服务管理文件管理查看日志压缩与解压防火墙软件的安装与管理其他系统服务管理systemctl输出系统中各个服务的状态:systemctl list-units --type=service查看服务的运行状态:systemctl status firewalld关闭服务:systemctl stop firewalld启动服务:systemctl ...原创 2019-09-04 12:59:14 · 34561 阅读 · 0 评论 -
你不得不知道的HashMap面试连环炮
1. 为什么用HashMap?1. 简述一下Map类继承关系?1. 解决哈希冲突的方法?1. 为什么HashMap线程不安全?1. resize机制?1. HashMap的工作原理是什么?1. 有什么方法可以减少碰撞?1. HashMap中hash函数怎么是是实现的?1. 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?1. 说说你对红黑...原创 2019-09-10 23:05:49 · 35927 阅读 · 0 评论 -
ssh框架中事务的声明和两种配置事务的方法
ssh框架中事务的声明和两种配置事务的方法声明式事务管理:Spring也提供了声明式事务管理。这是通过Spring AOP实现的。Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的,spring在这段时间内通过拦截原创 2015-10-23 07:18:02 · 44209 阅读 · 0 评论