JShell – Java交互工具(REPL) – 笔记

在今年九月正式发布的 Java9 版本中,其 /bin 目录中多个一个交互工具 JShell(据说 Java8 已有测试版)。众所周知,许多编程语言都提供称作 Read-Evaluate-Print Loop (REPL)的命令行工具,它们能够在输入声明、语句及表达式时计算,并立即给出结果。

以 Python 为例,运行整个工程、项目可能需要很长时间,但是你可以使用此工具执行一些需要确定的表达式,就能立即得到他们返回的值。这对于哪些开始学习语言或者接触语言新功能的程序员来说是个便捷好用的工具。

然而没 JShell 之前的 Java 来说,你需要编写一个测试类新建 main 方法来打印结果,并且每次修改后需要重写编译、运行。

Read more

一键配置脚本(用户添加、用户配置、源修改、Shadowsocks&BBR安装)

最近在各个服务器提供商中尝试适合的服务器,然而给多个服务器配置确实很是繁琐无聊。索性自己写个脚本,这样一接手新的服务器就能自动配置,剩下时间了来好好折腾别的。

需求:

  1. 添加用户(不用 root 是好习惯)
  2. 安装常用工具(什么Vim、Git等)
  3. 配置用户环境包括工具环境(命令别名、Vim配置、环境变量等)
  4. 翻墙利器安装(采用已有脚本)
  5. 待续完善

功能:

目前适用环境:CentOS 5+、Ubuntu、Debian

  1. 显示系统信息
  2. 修改源为国内阿里云源镜像(也可修改参数配置其他源)
  3. 创建指定用户、创建Home目录、指定Shell、添加到 sudoers,并禁用Root登录 (可修改参数)
  4. 安装常用工具,下载.bashrc、.vimrc 配置工作环境(来自博主自己)
  5. 安装Shadowsocks 、BBR(可选、来源 https://teddysun.com/ 秋水逸冰)
  6. 配置Java、Python等(待续完善)

Read more

深度解析Java线程池的异常处理

在逛同性交友网站GitHub的时候看到一个解析线程池异常处理的Issue,正好是曾经自己遇到过的问题。在此记录下来,并将其拓展到其他类型的线程池。

本文因篇幅省略了诸多AQS相关知识,可以查看博客中另一篇博文 一行一行源码分析清楚AQS 以保证清楚理解本文。
Read more

LockSupport.park 与wait用法示例

自Java1.6引入的LockSupport为开发者提供新的阻塞、唤醒线程的原语方法,只是平时都是使用已经封装好的各种Lock、Latch、Synchronizer并不常见到。在学习过程中看到这篇对比LockSupport.park() 方法和wait() 方法的示例Java多线程系列–“JUC锁”07之 LockSupport 来自skywang12345是的引起自己诸多疑惑,便打算按照编码实践一番。 Read more

一行一行源码分析清楚AQS[转]

在分析java并发包java.util.concurrent源码的时候,少不了需要了解AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是java并发包的基础工具类,是实现ReentrantLock、CountDownLatch、Semaphore、FutureTask等类的基础。

Google一下AbstractQueuedSynchronizer,我们可以找到很多关于AQS的介绍,但是很多都没有介绍清楚,因为大部分文章没有把其中的一些关键的细节说清楚。

本文将从ReentrantLock的公平锁源码出发,分析下AbstractQueuedSynchronizer这个类是怎么工作的,希望能给大家提供一些简单的帮助。 Read more