引言 JDK中除了上文提到的各种并发容器,还提供了丰富的阻塞队列.阻塞队列统一实现了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法.他的主要使用场景就是多线程下的生产者消费者模式,生产者线程通过put(e)方法将生产元素,消费者线程通过take()消费元素.除了阻塞功能,BlockingQueue接口还定义了定时的offer以及poll,以及一次性移除方法drainTo. //插入元素,队列…
作者:汤圆 个人博客:javalover.cc 前言 前面在线程的安全性中介绍过全局变量(成员变量)和局部变量(方法或代码块内的变量),前者在多线程中是不安全的,需要加锁等机制来确保安全,后者是线程安全的,但是多个方法之间无法共享 而今天的主角ThreadLocal,就填补了全局变量和局部变量之间的空白 简介 ThreadLocal的作用主要有二: 线程之间的数据隔离:为每个线程创建一个副本,线程之间无法相互访问 传参的简化:为每个线程创建的副本,在单个线程内是全局可见的,在多个方法之间不需要传…
内容概览: JavaScript简介 JavaScript的基本语法 JavaScript的基本应用 JavaScript的事件处理 window对象的使用 JavaScript简介: JavaScript(Java脚本)是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言: 是由Netscape公司的LiveScript发展而来的: 使用JavaScript可以轻松的实现和HTML的互操作,并且完成丰富的页面交互效果: 它是通过嵌入或调入在标准的HTML…
常用的日志框架 SLF4J,全称Simple Logging Facade for Java,即Java简单日志外观框架,顾名思义,它并非具体的日志实现,而是日志外观框架 java.util.logging,是JDK自带的一个日志实现框架 Logback,一个流行的日志实现框架 LOG4J,一个流行的日志实现框架 java.util.logging java.util.logging,JDK自带的一个日志实现框架,我们并没有在项目中使用,但在个人练习中常使用来打印日志,来个最简单的例子. imp…
FROM: http://segmentfault.com/blog/lidonghao/1190000000372192 ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法.在J2SE 1.5之前,都是由Process类处来实现进程的控制管理.本文简单介绍一下Process类的用法以及一些需要注意的问题. API方法说明如下:- destroy() 杀掉子进程.- exitValue…
一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 以整合功能 spring-boot,FusionChart,thymeleaf,vue,ShardingJdbc,mybatis-generator,微信分享授权,drools,spring-security,spring-jpa,webjars,Aspect,drools-drt 这次就来整合下简单的…
MyBatis Generator是一个可以帮助我们免去手写实体类&接口类以及XML的代码自动生成工具. 下面,通过一个简单的例子介绍MyBatis Generator如何使用. 大体流程如下: 创建项目 创建数据表 添加依赖 编写MyBatis Generator的配置文件 通过Maven插件来跑MyBatis Generator 测试一下 1.首先用IntelliJ IDEA创建一个最简单的Maven项目. 2.创建一张简单的数据表(我这里用的数据库是MySQL),并插入几条记录,以便之后测…
简介: AQS全称 AbstractQueuedSynchronizer,提供了一个基于FIFO(先进先出)队列,可以用于构建锁或者其他相关同步装置的基础框架. ReentrantLock.Semaphore.CountDownLatch.FutrueTask,这些都是基于AQS构建的. 而AQS是基于volatile变量的读/写和CAS( 也就是compareAndSet()方法 )实现的. volatile可以保证并发中的可见性,还可以禁止指令重排序.CAS,用于管理对共享数据的并发访问.…
思路是创建两个字符串a和b,再创建两个线程A和B,让每个线程都用synchronized锁住字符串(A先锁a,再去锁b:B先锁b,再锁a),如果A锁住a,B锁住b,A就没办法锁住b,B也没办法锁住a,这时就陷入了死锁.直接贴代码: public class DeadLock { public static String obj1 = "obj1"; public static String obj2 = "obj2"; public static void main…
1.数据库配置文件jdbc.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password= 2.数据库数据类JdbcUtils package com.test; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql…