java
文章平均质量分 92
无名草110
人生如逆旅 我亦是行人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程池ThreadPoolExecutor源码剖析
线程池执行源码分析原创 2022-07-27 09:46:59 · 460 阅读 · 0 评论 -
线程上下文类加载器(Context ClassLoader)
1.线程上下文类加载器是从jdk1.2开始引入的,类Thread中的getContextClassLoader()与setContextClassLoader(ClassLoader c1),分别用来获取和设置类加载器如果没有通过setContextClassLoader方法进行设置的话,线程将继承其父线程的上下文加载器,java应用运行时的初始线程的上下文类加载器是系统类加载器(这里是由Laun...原创 2018-05-15 15:14:48 · 10206 阅读 · 8 评论 -
线程
1.什么叫线程:线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。原创 2018-05-16 09:46:37 · 145 阅读 · 0 评论 -
多线程的同步问题
看一个例子,背景是,银行卡里有1000块钱,在柜台取800块钱,在提款机取800块钱,理论上来说,这个是不允许的看看实现代码package test;public class FetchMoney { public static void main(String[] args) { Bank bank = new Bank(); MoneyThre...原创 2018-05-16 16:04:50 · 167 阅读 · 0 评论 -
线程方法wait()和notify()的使用
实现需求:开启2个线程,1个线程对某个int类型成员变量加1,另外1个减1,但是要次序执行,即如果int型的成员变量是0,则输出01010101这样的结果代码如下package test;public class Sample { private int i; public synchronized void increase() { if(i != 0)...原创 2018-05-16 21:11:45 · 1555 阅读 · 0 评论 -
线程死锁
线程死锁概念两个线程A/B,A线程掌握着实例1的锁,要访问实例2的synchronized方法,但是实例2的锁被B所掌握着,然而B这时候又要访问实例1的synchronized方法,两个线程一直等着对方释放实例1/实例2的锁,造成程序无法进行下去,这种现象称为线程访问的死锁代码示例package test;public class ThreadDeadLock { public st...原创 2018-05-16 21:40:13 · 154 阅读 · 0 评论 -
mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml
在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: ...转载 2018-06-12 15:56:34 · 5209 阅读 · 2 评论 -
synchronized关键字jvm实现及各种锁
一.synchronized的字节码执行过程在java语言中存在两种内建的synchronized语法:1、synchronized语句;2、synchronized方法。对于synchronized语句当Java源代码被javac编译成bytecode的时候,会在同步块的入口位置和退出位置分别插入monitorenter和monitorexit字节码指令。而synchronized方法则会被翻译...原创 2018-07-15 15:53:47 · 558 阅读 · 0 评论 -
深入分析ConcurrentHashMap
效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争...原创 2018-07-15 16:32:43 · 191 阅读 · 0 评论 -
ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的...转载 2018-08-08 21:03:53 · 232 阅读 · 0 评论 -
强引用、弱引用、软引用和虚引用
划分几种引用类型目的:使程序能更加灵活地控制对象的生命周期。强引用强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object obj= new Object();当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果强引用对象不使用时,需要...原创 2019-05-11 15:30:45 · 799 阅读 · 0 评论 -
ThreadLocal的使用及其原理
ThreadLocal:ThreadLocal是线程局部变量,所谓的线程局部变量,就是仅仅只能被本线程访问,不能在线程之间进行共享访问的变量。ThreadLocal的使用非常广泛,典型的,mybatis的分页插件PageHelper用的就是ThreadLocal。在我们日常的开发里,最典型的应用就是例如一个请求(单线程)的执行过程要执行很多方法:a->b->c->d-&g...原创 2019-05-11 17:56:57 · 18346 阅读 · 3 评论 -
JVM——GC(垃圾回收)算法
一.垃圾回收的基本概念垃圾回收(GC,Garbage Collection),指内存中不会再被使用的对象清理掉。垃圾回收有很多种算法:如引用计数法、标记压缩法、复制算法、分代/分区的思想二.垃圾回收算法1.引用计数法:这是个比较古老而经典的垃圾收集算法,其核心就是在对象被其他所引用时计数器+1,当应用时效时则-1,但是这种方式有非常严重的问题:无法处理循环引用的情况。还有就是每次进行+-操作比较浪...原创 2018-05-21 09:49:37 · 446 阅读 · 0 评论 -
JAVA并发包——锁
1.java多线程中,可以使用synchronized关键字来实现线程间的同步互斥工作,其实还有个更优秀的机制来完成这个同步互斥的工作——Lock对象,主要有2种锁:重入锁和读写锁,它们比synchronized具有更强大的功能,并且有嗅探锁定、多路分支等功能。2.ReentrantLock(重入锁)重入锁,在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,否则会造成锁永远无法释放,...原创 2018-05-20 16:49:48 · 697 阅读 · 0 评论 -
JVM笔记——类加载
1.在java代码中,类型(如class enum interface)的加载、连接、初始化过程都是在程序运行期完成的。这个特性,使得本为静态语言的java,拥有了动态语言的某些特征加载:查找并加载类的二进制数据 类的加载指的是将类的.calss文件中的二进制数据读入内存,将其放置在运行时数据区的方法区内,然后创建一个java.lang.Class对象(规范没说明这个Class对象要...原创 2018-02-24 11:44:27 · 181 阅读 · 0 评论 -
java类的主动使用/被动使用
对类的使用方式分为:主动使用、被动使用所有的java虚拟机实现必须在每个类或接口被java程序“首次主动使用”时才初始化他们ps:被动使用不会初始化类,但是有可能会加载类(JVM规范里没有说明)并且,如果在加载的过程中,遇到了.class文件的缺失或者存在错误,类加载器只会在首次主动使用它们时才会报错,如果一直没有主动使用,则不会报错主动使用:创建类的实例、访问某个类或者接口的非final类型的静...原创 2018-03-11 15:21:48 · 2821 阅读 · 3 评论 -
JVM调试说明
-XX:+<option>:表示开启option选项-XX:-<option>:表示关闭option选项-XX:<option>=<value>:表示将option选项的值设置为value原创 2018-04-08 14:56:07 · 155 阅读 · 0 评论 -
JAVA JVM助记符
ldc:将int/float/String类型的常量值从常量池中推送至栈顶(栈顶的值是即将要用的)bipush:将单字节(-128 ~ 127)的常量值从常量池中推至栈顶sipush:将一个短整型(-32768 ~ 32767)的常量值从常量池中推至栈顶iconst_1:将int型的常量值1从常量池中推至栈顶(jvm专门为0/1/2/3/4/5这5个数字开的助记符),iconst_m1则表示的是-...原创 2018-04-08 15:27:30 · 1226 阅读 · 0 评论 -
类加载器及其双亲委托机制
类加载器分为4种:1.根类(Bootstrap)加载器启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,不开源,是虚拟机自身的一部分,它负责将 /lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中2.扩展类(Extension)加载器扩展类加载器是指Sun公司(已被Oracle收购)实现的sun.misc.原创 2018-04-11 15:45:17 · 315 阅读 · 0 评论 -
自定义ClassLoader的使用
import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;public class ClassLoaderTest extends ClassLoader { private String classLoad...原创 2018-05-10 17:25:34 · 780 阅读 · 0 评论 -
多线程情况下,单例模式的实现方式
方式1(推荐)、package singleton;public class Singletion { private static class InnerSingletion { private static Singletion single = new Singletion(); } public static Singletion getInstance(){ r...原创 2018-05-18 09:44:48 · 381 阅读 · 0 评论 -
并发类容器
1.ConcurrentMap(1)ConcurrentMap两个重要的实现:ConcurrentHashMap和ConcurrentSkipListMap(支持并发排序,弥补ConcurrentHashMap,类似TreeMap)(2)ConcurrentHashMap与HashTable底层实现的不同a.HashTable在进行增删改的时候,会把整个对象锁起来,不允许其他线程修改b.Concu...原创 2018-05-18 14:04:01 · 126 阅读 · 0 评论 -
Future模式
一、模式讲解:类似是网购,网购发个请求下单,打包、出货、运输等等工作商家就会帮你处理好,你在家等收货就行了二、模式示意图流程讲解:1.业务发起请求2.系统接收到请求,并且立即返回,同时发起真正的请求3.请求数据真正返回...原创 2018-05-19 15:18:48 · 165 阅读 · 0 评论 -
JAVA Executor(线程池)框架
一、Executor概述为更好控制线程,jdk提供一套线程管理框架Executor,帮助开发人员有效地进行线程控制。它们都位于java.util.concurrent包中,是jdk并发包的核心。其中有个比较重要的类:Executors,他扮演着线程工厂的角色,我们可以通过Executors创建特定功能的线程池。二、Executors创建线程的方法newFixedThreadPool()...原创 2018-05-19 16:20:20 · 222 阅读 · 0 评论 -
java并发包工具(java.util.Concurrent)
一、CyclicBarrier作用:所有线程准备好才进行,只要一条线程没准备好,都不进行用法:所有线程准备好以后调用CyclicBarrier的await方法,然后主线程执行CyclicBarrier的countDown方法实现需求:n个运动员,全部准备好了才一起起跑。代码如下package concurrent019;import java.io.IOException; import j...原创 2018-05-20 11:42:51 · 411 阅读 · 0 评论 -
volatile关键字的作用
volatile用于修饰变量1 多线程中,有主内存和线程内存的区分,线程内存会持有成员变量的值,如果变量加上这个修饰符,则一个线程修改这个变量的值后,会同步到其他线程(其实是同步到主内存,然后其他线程在使用这个值的时候,再在主内存同步一遍)2 多线程中,防止指令重排序原创 2017-07-26 18:21:48 · 291 阅读 · 0 评论
分享