java
文章平均质量分 72
风吹过wu
这个作者很懒,什么都没留下…
展开
-
volatile看这一篇够用了
原文链接什么是Java内存模型(JMM)通俗来说,JMM是一套多线程读写共享数据时,对数据的可见性,有序性和原子性的规则为什么会有Java内存模型JVM实现不同会造成“翻译”的效果不同,不同CPU平台的机器指令有千差万别,无法保证同一份代码并发下的效果一致。所以需要一套统一的规范来约束JVM的翻译过程,保证并发效果一致性原子性什么是原子性原子性指一系列的操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分的。原子性怎么实现使用synchron转载 2021-05-17 13:57:00 · 226 阅读 · 2 评论 -
什么情况下Java程序会产生死锁?如何定位、修复?
典型的回答:死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一致处于等待之中,没有任何同样个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。你可以利用下面的示例图理解基本的死锁问题:定位死锁最常见的方式就是利用jstack等工具获取线程栈,然后定位互相之间的依赖关系,进而找到死锁。如果是比较明显的死锁,往往jstack等就能直接定位,类转载 2020-07-28 11:27:24 · 1135 阅读 · 3 评论 -
只学一遍的策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的对立的类中,从而使得她们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下策略模式的结构:环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy) 角色: 这是一个抽象角色,通常由一个接口或者抽象类实现。词角色给出所有具体策略类所需的接口具体策略(ConcreteStrategy)角色: 包装了相关的算法和行为。源代码:环境角色类:public class Context原创 2020-07-27 15:30:39 · 140 阅读 · 0 评论 -
按顺序执行的多线程-看了这一篇面试再也不慌了
一.前言使用线程的join方法使用主线程的join方法使用线程的wait方法使用线程的wait方法使用线程的Condition(条件变量)方法使用线程的CountDownLatch(倒计数)方法使用线程的CyclicBarrier(回环栅栏)方法使用线程的Semaphore(信号量)方法二、实现我们下面需要完成这样一个应用场景:1.早上;2.测试人员、产品经理、开发人员陆续的来公司上班;3.产品经理规划新需求;4.开发人员开发新需求功能;5.测试人员测试新功能。规划需求,开发转载 2020-07-27 15:27:50 · 205 阅读 · 0 评论 -
java 泛型全解 - 绝对最详细
背景对于java的泛型我一直属于一知半解的,平常真心用的不多。直到阅读《Effect Java》,看到很多平常不了解的用法,才下定决心,需要系统的学习,并且记录下来。1、泛型的概述:1.1 泛型的由来根据《Java编程思想》中的描述,泛型出现的动机:有很多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。泛型的思想很早就存在,如C++中的模板(Templates)。...原创 2019-08-27 18:30:00 · 7117 阅读 · 0 评论 -
数组,链表,栈,队列,散列表
重温了数据结构 ,温故而知新。数组数组是由有限个相同类型的变量所组成的有序集合,它的物理存储方式是顺序存储,访问方式是随机访问,利用下标查找数组元素的时间复杂度O[1],中间插入,删除数组元素的时间复杂度是O[n]。链表链表是一种链式数据结构,由若干节点组成,每个节点包含指向下一个节点的指针。链表的物理存储方式是随机存储,访问方式是顺序访问。查找链表节点的时间复杂度是O[n],中间插入、删...原创 2019-08-25 15:03:05 · 705 阅读 · 0 评论 -
java简单的字符串大小比较——compareTo()方法
在java编程中,我们会偶尔遇到字符串大小比较的问题,compareTo()方法很简单就实现这种功能。该方法用于判断一个字符串是大于、等于还是小于另一个字符串。判断字符串大小的依据是根据它们在字典中的顺序决定的。语法:Str1.compareTo(Str2);其返回的是一个int类型值。若Str1等于参数字符串Str2字符串,则返回0;若该Str1按字典顺序小于参数字符串Str2,则返回值小...转载 2019-01-08 21:21:14 · 24442 阅读 · 5 评论 -
java判断时间在时间段以内如(7:00-22:00)
背景有时候会用到判断当前时间是否在时间段以内。直接上代码1、直接比较时间的字符串大小private fun isTimeRange(currentTime: Long): Boolean { val nowDate = Date(currentTime) val simpleDate = SimpleDateFormat("HH:MM", Locale.CHINA) ...原创 2018-09-20 21:23:29 · 9498 阅读 · 2 评论 -
图解HTTP学习记录(二)
第2章 简单的HTTP协议HTTP协议规定,先从客户端开始建立通信,服务端在没有接收到请求之前不会发送响应。请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对...原创 2018-08-28 09:31:20 · 332 阅读 · 0 评论 -
Android 定时器使用
原文地址:http://www.android-study.com/pingtaikaifa/508.html在Android开发中,定时器一般有以下3种实现方法:一、采用Handler与线程的sleep(long)方法 二、采用Handler的postDelayed(Runnable, long)方法 三、采用Handler与timer及TimerTask结合的方法下面逐一介绍:一、采用Han转载 2016-10-13 20:08:02 · 502 阅读 · 0 评论 -
Android中Handler的使用方法
Android系统是不允许在非主线程中更新UI的,如果你这样做了,那么你一定遇到过这样的错误提示“android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.” 这个时候就需要使用到Handle原创 2016-10-13 23:34:47 · 584 阅读 · 0 评论