`
QING____
  • 浏览: 2253218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
    并发访问的安全性通常有Lock(同步)或者CAS方式实现,其中CAS是无锁(lock-free)并发的基础理念;本文主要简述一下通过Treiber Stack(1986,R.Kent Treiber)实现一个无锁并发栈,其主要思想就是使用CAS原子性的操作栈顶(或者栈底,单端队列),根据其思想,我们可以创造出更多有意义的实现。       其中在JAVA中,FutureTask.WaitNode是典型的Treiber Stack实现;此外,Fork/Join框架中WorkQueue的实现中借鉴了此思想。       我们展示一下,Treiber Stack的典型示例: imp ...
论逆境(培根)           “一帆风顺固然令人羡慕,但逆水行舟则更令人钦佩。”这是塞涅卡效仿斯多派哲学讲出的一句名言。确实如此。如果奇迹就是超乎寻常,那么它常常是在对逆境的征服中显现的。塞涅卡还说过一句更深刻的格言:“真正的伟大,即在于以脆弱的凡人之躯而具有神性的不可战胜。”这是宛如诗句的妙语,其境界意味深长。     古代诗人在他们的神话中曾描写过:当赫克里斯去解救盗火种给人类的英雄普罗米修斯的时候,他是坐着一个瓦罐漂渡重洋的。这个故事其实也正是人生的象征:因为每一个基督徒,也正是以血肉之躯的孤舟,横游在波涛翻滚的人生海洋的。     面对幸运所需要的美德是节制,而面对 ...
    JAVA中提供了几个常用的用于生成随机数(流,JDK 8支持)的API:Random、ThreadLocalRandom、SecureRandom、SplittableRandom;这几个类在使用场景上,稍微有些区分。   一、Random     1、生成伪随机数(流),使用48位种子,使用线性同余公式进行修改。可以通过构造器传入初始seed,或者通过setSeed重置(同步);默认seed生成主导变量为系统时间的纳秒数。     2、如果两个(多个)不同的Random实例,使用相同的seed,按照相同的顺序调用相同方法,那么它们得到的数字序列也是相同的。这种设计策略,既有优 ...
    JDK 7中对URLClassLoader中新增了close方法,主要用于解决本地jar更新加载的异常问题。       URLClassLoader.close()方法有效地消除了如何支持从特定代码库(http),特别是从JAR文件(本地)加载的类和资源的更新实现的问题。       原则上,一旦应用程序清除对loader对象(仅仅是loader对象,而非加载的class对象)的所有引用,垃圾收集器和终结机制将最终确保释放和关闭所有资源(例如,本地JarFile对象打开文件)。然后,应用程序可以替换本地JAR文件,并创建一个新的URLClassLoader实例以从同一位置加载 ...

JAVA NIO2文件操作

    博客分类:
  • JAVA
    JAVA7+对NIO进行了增强,主要在对文件操作部分做了大量的改进,体现在将File操作进行分离、封装、改进最终形成Path(Paths)、Files、FileSystem(FileSystems)三个主要类,其中Paths、Files中提供了大量便捷的静态操作方法;此外NIO2还提供了有关文件权限(属性)操作、软连接、文件查找等高级API,使得NIO2具有更全面的文件系统操作接口。JAVA IO与NIO中有关文件操作的API迁移对比表,请参考“IO与NIO文件API对比”   Path    文件系统都是Tree或者层级结构来组织文件的,任何一个节点可以是一个目录或者一个文件 ...
    每个文件或者目录基于权限组具有三种用户:     1、owner:持有者、所有者,即文件创建者,表名文件所有者具有的权限,不影响其他用户(组)的操作。     2、group:所有者所在组(用户)的权限,文件所在组与文件 ...
    我们在日常开发中,经常会使用logback打印日志,经常会在日志中打印比如手机号、卡号、邮箱等敏感信息,对数据安全而言是有风险的;但是如果业务程序如果处理这些问题,则需要在每个打印日志的地方都需要进行重复的脱敏操作,繁琐而且影响代码风格,还会有遗漏情况;此时我们可能需要考虑一个相对统一的解决方案,那就是增强logback底层的特性,在日志message落盘之前统一进行检测、脱敏。       我们通常的日志处理面临的通用诉求:     1)超长日志message截取:程序打印的日志message可能非常大,比如超过1M,这种message极大的影响系统的性能,而且通常数据价值比 ...
    我本人在使用spring-kafka集成组件时,遇到了不少问题,感觉这个组件使用的方式比较多,有时候会有些纠结。spring-kafka组件设计时考虑的比较多的场景,比如兼容JMS设计范式、兼容springboot自动装配等等,所以使用时需要适度考虑自己的实际场景。如下示例的环境:     1、springboot:1.5.11      2、spring-kakfa:1.3.5     3、kafka broker:1.1.0   一、兼容性     参考:     https://cwiki.apache.org/confluence/display/KAFKA/C ...
    kafka目前已升级到1.1.0版本,Broker的在线upgrade比较麻烦,所以我建议大家新项目直接基于最新版本(1.1.0),旧版本不同程度存在一些bug,比较难以解决。       1、broker配置样例(未声明的配置项,建议保持默认):server.properties   ############################# Server Basics ############################# # brokerId,同一集群id必须唯一,Integer类型 broker.id=0 auto.create.topics.enabl ...
    有些应用突然连接不上zookeeper,但是在机器上进行各种联通性测试也没有问题,日志错误如下: 2018-04-22/20:05:33.728 [http-nio-8080-exec-2-SendThread(ip-10-0-12-107.cn-north-1.compute.internal:2181)] INFO org.apache.zookeeper.ClientCnxn 966 - Opening socket connection to server ip-10-0-12-107.cn-north-1.compute.internal/10.0.12.107:2181 ...
    目前Spring体系下基础技术栈有SpringMVC、SpringBoot(以及SpringCloud)两种,在读取配置文件的方式上有些差异,但是整体保持一致。最近遇到在读取配置文件时发生乱码的问题,其实解决方式也比较简单。     1)对于properties文件,无论何种配置方式,Spring底层均使用Resource方式进行加载,最终基于JAVA本身的“classLoader.getResourceAsStream()”读取信息,编码默认为“ISO-8859-1”,编码方式可以通过配置指定。     参见ConfigurationClassParser.java、Class ...
    Springboot单个数据源比较容易配置,它自动装配特性支持下,DataSource的初始化和注入等比较便捷。但是在多数据源情况下,反而有些蹩脚;其实实施起来也不算太复杂,方式也比较多。本文展示一个比较易用的方式,仅供参考。       我们假定有2个数据源,dataSource1和dataSource2,基于tomcat-jdbc连接池,粗略配置如下文所示,部分属性可以自行按需增加。   1、application.properties   ################# dataSource #################### datasource: ...

JMX最佳实践与详解

    博客分类:
  • JAVA
一、JMX最佳实践     1、Object Names(对象命名)     每个JMX MBean都需要一个“Object Name”,选择一个始终一致的、可用的Object Names将是非常重要的;客户端与你的对象模型(model)交互时,或许是直接将它展示且可读,比如jconsole;或者它被应用程序使用Object Names直接访问你声明的对象模型。所以,在多个models之间,MBean的对象命名一个尽可能唯一。       2、Object Name语法格式     一个Object Name是“javax.management.ObjectName”的实例,Obj ...
    Jolokia作为目前最主流的JMX监控组件,spring社区(springboot、MVC、cloud)以及目前主流的中间件服务均采用它作为JMX监控,简单来说,jolokia可以帮助我们解决:     1)JMX可以实现VM内部运行时数据状态的对外export,我们通过 ...
    最近基于SpringMVC项目 + tomat-jdbc配置数据库源,启动抛出: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.IllegalArgumentException: Layered pools are not allowed.       这个错误,徘徊了很久,分析配置文件没有发现问题,经过源码分析得知解决办法,主要是 ...
Global site tag (gtag.js) - Google Analytics