WF Blog

Simple,So charming...

深入理解线程通信

深入理解线程通信

深入理解线程通信 深入理解线程通信 前言 开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。 或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。 可以通过以下几种方式实现: 等待通知机制 等待通知模式是 Java 中比较经典的线程通信方式。 两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来进行通讯。 如...

如何优雅的使用和理解线程池

如何优雅的使用和理解线程池

Java 多线程三大核心 前言 平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条: 可见线程池的重要性。 简单来说使用线程池有以下几个目的: 线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。 线程池原理 谈到线程池就...

ReentrantLock 实现原理

ReentrantLock 实现原理

Java 多线程三大核心 ReentrantLock 实现原理 使用 synchronized 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。 而 ReentrantLock 就是一个普通的类,它是基于 AQS(AbstractQueuedSynchronizer)来实现的。 是一个重入锁:一个线程获得了锁之后仍然可以反复的加锁,不...

Java 多线程三大核心

Java 多线程三大核心

Java 多线程三大核心 Java 多线程三大核心 原子性 Java 的原子性就和数据库事务的原子性差不多,一个操作中要么全部执行成功或者失败。 JMM 只是保证了基本的原子性,但类似于 i++ 之类的操作,看似是原子操作,其实里面涉及到: 获取 i 的值。 自增。 再赋值给 i。 这三步操作,所以想要实现 i++ 这样的原子操作就需要用到 synchron...

微信公众号文章拉取

微信公众号文章拉取

做了一个简单的微信公众号文章拉取功能,做个简单记录 Http请求工具类 package com.asiainfo.vehicle.modules.community.util; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.clien...

扫描指定包路径下所有包含指定注解的类

扫描指定包路径下所有包含指定注解的类

当我们自定义注解后,类上使用注解后,我们怎么扫描指定包路径下所有包含指定注解的所有类,以下是代码示例: package com.apidoc.utis; import com.apidoc.annotation.Api; import com.apidoc.utis.utils.JsonUtil; import java.io.File; import java.io.IOE...

Spring项目启动时执行某个业务

Spring项目启动时执行某个业务

当Spring项目启动时需要初始化执行某个业务,可以通过@PostConstruct实现 package com.example.demo.init; import javax.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component public class ...

synchronized 关键字原理

synchronized 关键字原理

synchronized 关键字原理 synchronized 关键字原理 众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前 Class 对象。 同步块,锁的是 () 中的对象。 实现原理: JVM 是通过进入、退出对象监视器( Monitor )来实现对方法、...

CentOS7中使用yum安装Nginx的方法

CentOS7中使用yum安装Nginx的方法

CentOS7中使用yum安装Nginx的方法 1、添加源   默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源: sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el...

Java 多线程常见问题

Java 多线程常见问题

Java 多线程常见问题 Java 多线程常见问题 上下文切换 多线程并不一定是要在多核处理器才支持的,就算是单核也是可以支持多线程的。 CPU 通过给每个线程分配一定的时间片,由于时间非常短通常是几十毫秒,所以 CPU 可以不停的切换线程执行任务从而达到了多线程的效果。 但是由于在线程切换的时候需要保存本次执行的信息(详见),在该线程被 CPU 剥夺时间片后又再次运行恢复上次...