Java随记
王熙中
喜欢计算机~爱编程~不爱BG
展开
-
ThreadLocal 那点事儿
ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVariable(线程局部变量)才对,真不理解为什么当初 Sun 公司的工程师这样命名。早在 JDK 1.2 的时代,java.lang.ThreadLocal 就诞生了,它是为了解决多线程并发问题而设计的,只不过设计得转载 2016-12-06 10:36:57 · 420 阅读 · 0 评论 -
使用 RMI + ZooKeeper 实现远程调用框架
在 Java 世界里, 有一种技术可以实现“跨虚拟机”的调用,它就是 RMI(Remote Method Invocation,远程方法调用) 。例如,服务A 在 JVM1 中运行,服务B 在 JVM2 中运行,服务A 与 服务B 可相互进行远程调用,就像调用本地方法一样,这就是 RMI。在分布式系统中,我们使用 RMI 技术可轻松将 服务提供者(Service Provider)与 服务消费转载 2017-01-20 17:32:21 · 403 阅读 · 0 评论 -
Java集合初始化赋值等相关问题
以下来举几个例子: Map map= new HashMap() {{ put("key1", "value1"); put("key2", "value2"); put("key3", "value3"); }};List stringList=new ArrayList(){{原创 2017-03-08 13:54:59 · 3636 阅读 · 0 评论 -
Bean实例化问题
在动态注册RMI远程调用的Bean后迟迟不进行注册,后显示在代码中getBean方法后注册成功,找到以下文章可以参考解决该问题容器启动之后,并不会马上就实例化相应的bean定义。我们知道,容器现在仅仅拥有所有对象的BeanDefinition来保存实例化阶段将要用的必要信息。只有当请求方通过BeanFactory的getBean()方法来请求某个对象实例的时候,才有可能触发转载 2017-03-13 17:24:29 · 596 阅读 · 0 评论 -
BeanFactory与FactoryBean
原文地址:http://blog.csdn.NET/is_zhoufeng/article/details/38422549首先要分辨BeanFactory 与 FactoryBean的区别, 两个名字很像,所以容易搞混BeanFactory: 以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂FactoryBean:以Bean结尾,表示它是一个Bean转载 2017-03-23 16:21:15 · 316 阅读 · 0 评论 -
Spring 事务失效问题
只要避开Spring目前的AOP实现上的限制,要么都声明要事务,要么分开成两个类,要么直接在方法里使用编程式事务[问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring AOP啊,事务管理真轻松啊,真轻松;事务管理代码没有了,脑不酸了,手不痛了,一口气全配上了事务;轻量级,测试起来也简单,嘿!”。不管从哪个角度看,轻量级声明式事务都是一件解放生转载 2017-04-10 21:46:03 · 369 阅读 · 0 评论 -
Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
首先要明白 this.XXX 的使用场景 使用Thread.currentThread().getName()和使用this.getName()和对象实例.getName(),都可以得到线程的名称,但是使用this调用getName()方法只能在本类中,而不能在其他类中,更不能在Runnable接口中,所以只能使用Thread.currentThread().getName()获取线程的名称,转载 2017-04-13 13:42:17 · 633 阅读 · 0 评论 -
Java多线程并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下转载 2017-04-13 17:56:50 · 477 阅读 · 0 评论 -
Java多线程中interrupt interrupted isInterrupted
/** * Created by wangxizhong on 17/4/13. */public class Main { public static void main(String[] args) throws InterruptedException { MyThread thread = new MyThread(); thread.star原创 2017-04-13 21:27:33 · 457 阅读 · 0 评论 -
Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就转载 2017-04-13 22:49:41 · 387 阅读 · 0 评论 -
Java中Lock,tryLock,lockInterruptibly有什么区别?
ReentrantLock 锁有好几种,除了常用的lock ,tryLock ,其中有个lockInterruptibly 。先把API粘贴上来lockpublic void lock()获取锁。如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为 1。如果当前线程已经保持该锁,则将保持计数加 1,并且该方法立即返回。如果该锁被另一个线程保持,则出于线程调转载 2017-04-15 21:05:47 · 5356 阅读 · 0 评论 -
Thread的中断机制(interrupt)
中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被发送过中断请求,请使转载 2017-04-15 21:31:22 · 756 阅读 · 0 评论 -
spring中注册bean(通过代码动态注册)
//将applicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext; // 获取bean工厂并转换为DefaultLi转载 2017-01-20 17:21:08 · 766 阅读 · 0 评论 -
RMI(Remote Method Invocation)初窥门径
【引言】作为J2EE核心技术之一的RMI,它允许客服端调用一个远程服务器的组件,并返回调用结果(返回值或异常),可以完成分布式应用。整个调用过程由RMI实现,对使用者透明。【Stub和Skeleton】1、要了解RMI原理,Stub和Skeleton是必须先理解的两个概念。以下引用别的一段话:做个比方说明这两个概念。 假如你是A,你想借D的工具,但是又不认识D的管家C,转载 2017-01-20 16:34:02 · 309 阅读 · 0 评论 -
SpringData,Spring与Hibernate整合小记
Repository SpringData Hibernate原创 2016-11-12 21:34:40 · 1870 阅读 · 0 评论 -
Modifier静态属性
JAVA 反射机制中,Field的getModifiers()方法返回int类型值表示该字段的修饰符。其中,该修饰符是java.lang.reflect.Modifier的静态属性。对应表如下:PUBLIC: 1PRIVATE: 2PROTECTED: 4STATIC: 8FINAL: 16SYNCHRONIZED: 32VOLATILE: 64转载 2017-01-05 15:07:02 · 911 阅读 · 0 评论 -
@SuppressWarnings
一、前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了。这时我们可以在方法前添加 @SuppressWarnings("unused") 去除这些“感叹号”。 二、 @SuppressWarings注解转载 2017-01-07 17:35:36 · 399 阅读 · 0 评论 -
java 二进制兼容性概述
现在的软件越来越依赖于不同厂商、作者开发的共享组件,组件管理也变得越来越重要。在这方面,一个极其重要的问题是类的不同版本的二进制兼容性,即一个类改变时,新版的类是否可以直接替换原来的类,却不至于损坏其他由不同厂商/作者开发的依赖于该类的组件? Java二进制兼容性概念的主要目标是推动Internet上软件的广泛重用,同时它还避免了大多数C++环境面临的基础类脆弱性问题——例如,在转载 2017-01-07 19:39:23 · 647 阅读 · 0 评论 -
Java 8 Optional
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了OptionalUser> user = ...... if (user.isPresent()) { return user.getOrders();} else转载 2017-01-07 21:01:33 · 317 阅读 · 0 评论 -
RabbitMQ消息处理机制fanout,direct,topic,header
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储RabbitMQ提供了四种Exchange:fanout,direct,topic,headerheader模式在实际使用中较少,本文只对前三种模式进行比较。 性能排序:fanout > direct >> topic。比例大约为11:10:6 一.转载 2017-01-15 13:21:12 · 3939 阅读 · 0 评论 -
Exception异常处理反模式
应该抛出一个异常还是应该返回一个null?是抛出checked类型异常还是抛出unchecked类型异常?对于很多中级的开发人员而言,异常处理往往是一件事后才去考虑的事情。他们经常使用的异常处理方式是try/catch/printStackTrace()。当这些开发人员想要尝试更有新意的异常处理方式时,常常会陷入一些常见的异常处理反模式中。 随着1998年《反模式:危机中软件、架构和项目的重转载 2017-01-17 01:39:47 · 1047 阅读 · 0 评论 -
zookeeper 最佳教程
1、Zookeeper深入理解(一)(概念及基础)http://hao0.me/zookeeper/2015/02/28/zk-basic.html2、Zookeeper深入理解(二)(编程实践之Master-Worker)http://hao0.me/zookeeper/2015/03/02/zk-program-master-worker.html3、Zookeeper转载 2017-01-17 01:41:39 · 862 阅读 · 0 评论 -
SpringData JPA @Query分页查询Exception问题解决方案
Caused by: org.springframework.data.jpa.repository.query.InvalidJpaQueryMethodException: Cannot use native queries with dynamic sorting and/or pagination in method public abstract org.springframework.原创 2017-02-16 16:50:11 · 8515 阅读 · 0 评论 -
Spring MVC 4.2 增加 CORS 支持
Spring MVC 4.2 增加 CORS 支持跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。比如说,域名A(http://domaina.example)的某 Web 应用程序中通过标签引入了域名B(http://domainb.foo)站点的某图片资源(http://domainb.foo/转载 2017-01-20 09:45:35 · 328 阅读 · 0 评论 -
Java RMI远程服务调用
RMI的定义RPC (Remote Procedure Call):远程方法调用,用于一个进程调用另一个进程中的过程,从而提供了过程的分布能力。RMI(Remote Method Invocation):远程方法调用,即在RPC的基础上有向前迈进了一步,提供分布式对象间的通讯。允许运行在一个java 虚拟机的对象调用运行在另一个java虚拟机上对象的方法。这两个虚拟机可以是运行在相同计算机转载 2017-01-20 11:13:55 · 661 阅读 · 0 评论 -
new HashMap(){{put(key, value);}}的解释
一、HashMap的初始化1、HashMap 初始化的文艺写法 HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化: [java] view plain copy HashMap map = new HashMap(); map.put("Name", "June");转载 2017-05-20 10:55:21 · 5248 阅读 · 0 评论