AlstonWilliams's Blog

Thinking will not overcome fear but action will.

Java方法返回值还是引用

一般来说,在学习Java时,都会有人向我们强调Java方法的参数是传值还是传引用.但是对于Java方法的返回值,是返回引用,还是返回值,却没有人说. 其实Java方法的返回值,跟参数的传递一样,都是基本类型返回值,而非基本类型,则返回引用. 测试的代码已经放到如下Gist中了:https://gist.github.com/AlstonWilliams/a1fa5f453ad4a0137...

Java三个线程分别打印十次A,B,C,要求打印出ABCABC----的形式

今天一位同学问我题目中的这个问题,并给了我下面的代码,花了好久才看懂,这里总结一下. 实现代码如下所示: package com.multithread.wait; public class MyThreadPrinter2 implements Runnable { private String name; private Ob...

Javascript-default-import-vs-named-import

在写React Native代码时,遇到了一个问题. 在一个组件中用import {React, Component} from ‘react’;导入React依赖时,老是提示undefined is not a function(evaluating ‘_react.React.createElement’). 由于调试起来特别不方便,我们又不能从错误栈中得到什么有用的信息,所以搞得我...

Java8并发教程-Synchronization-and-Locks

这是该系列教程的第二篇.其中用到了一个工具类,和其中的两个方法.如下图所示: Synchronized 在第一篇教程中,我们已经介绍了如何通过** Executor Service**来并行执行任务.但是,这也引入了一个新的问题.即我们如何并发的访问那些共享的变量.假设我们打算用多个线程来并发地增加一个数字.我们使用下面的代码: 我们可以看到,其结果不是正确的结果,即100...

Java8并发教程-Atomic-variables-and-ConcurrencyMap

这是本教程的最后一篇.我们还是用到了上一篇中提到的那个工具类和其中的两个方法.请看上篇文章,来获取此代码. AutomicInteger ** java.concurrent.atomic**包中,提供了大量的有用的类,来执行原子性的操作.原子性的意思是,所有的操作要不就都执行成功,要不就都不执行成功. 这些原子性的类内部,都使用了著名的** CAS指令.现代处理器都支持这条指令.相对于...

Java8并发教程---Thread和Executors

本教程分为三个部分,这是第一部分. 在本教程中,我们大量使用了Java8 中的 lambda表达式.如果你对此不是很熟悉,请自行查阅资料来了解. 当然,你也可以看这篇. Thread and Runnable 现代操作系统,都支持通过进程和线程来实现并发.进程是程序的运行时的实例.程序是静态的,而进程是动态的.进程与进程之间,相互独立.例如,如果你运行一个Java程序,操作系统就会生成...

Java-SocketException-Too-many-open-files

在通过ab进行压力测试时,遇到了这个问题.并发请求数为10000. 因为每个Socket都对应一个文件,所以同时这么高的并发请求势必会导致创建很多文件.而默认情况下,Linux中,用户最多可创建的文件数为1024.可以通过ulimit -n来查看. 了解其原因之后,我们就能想到解决方案了.无非就是增加用户可创建的文件数.通过编辑/etc/security/limits.conf文件,添加...

Java-SPI

很久之前,在做项目时,想要做插件式开发,但是当时并没有想到怎么实现.今天,在研究Spring的源码时,发现有SPI的身影出现. 其实SPI这个东西,之前也看到过它的身影,也有看过Oracle的官方文档来了解它.但是,由于没有记录下来,所以在过了一段时间之后,就忘记了. 今天,又重新研究了一下SPI,这里就记录下来.正好最近也打算做一个项目,就打算采用插件化开发的方式. 介绍 如果各位...

Java-NIO核心组件-Selector和Channel

昨天我们介绍了一下SelectorProvider和IO multiplexing.特别是IO multiplexing中的epoll系统调用,是Linux版本的Java的NIO的核心实现. 那今天我们就来介绍一下, Java NIO中的核心组件, Selector和Channel.这两个组件,对于熟悉Java OIO,而不熟悉Java NIO的朋友来说,理解其作用是极其不易的. 前提条...

Java-NIO-WatchService奇遇记

在扩展Apache Flume的Taildir Source的过程中,由于感觉其采用IO轮询的方式,而不是Java NIO,会有性能问题,于是就打算通过Java NIO将相关的部分重写一遍. 我们的想法是这样的,先监控某个目录,然后当有文件修改事件触发时,判断一下被修改的文件是否是某些特定的文件,如果是,则读取其新增的内容,并发送给Channel. 通过Google,我们找到了Watch...