
Java
文章平均质量分 71
XP-Code
这个作者很懒,什么都没留下…
展开
-
面试题:Java 线程的状态及其转换
Java线程在运⾏的声明周期中可能处于6种不同的状态,在给定的⼀个时刻,线程只能处于其中的⼀个状态:THE END.原创 2021-04-13 22:13:26 · 186 阅读 · 0 评论 -
InnoDB 中的意向锁
一、意向锁简介InnoDB 存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁。行级锁的缺点是:由于针对的是单行记录(实际是对索引项加锁),如果表内的数据量特别大,在一些情况下需要请求大量的锁资源,原创 2021-04-10 20:28:40 · 502 阅读 · 0 评论 -
Unsafe 使用详解
Unsafe是jdk提供的一个直接访问操作系统资源的工具类(底层c++实现),它可以直接分配内存,内存复制,copy,提供cpu级别的CAS乐观锁等操作。Unsafe位于sun.misc包下,jdk中的并发编程包juc(java.util.concurrent)基本全部靠Unsafe实现,由此可见其重要性。它的目的是为了增强java语言直接操作底层资源的能力,无疑带来很多方便。但是,使用的同时就得额外小心!它的总体作用如下:1. 获取Unsafe对象Unsafe被设计为单例,并且只允许被引导类加载器(原创 2021-03-26 14:25:03 · 1889 阅读 · 0 评论 -
ForkJoinPool 应用和原理
ForkJoinPool 类是位于 java.util.concurrent 包下的一个类。它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。一、应用1. 累加import java.util.*;import java.util.concurrent.*;public class ForkJoinSum { /** * 这是一个简单的Join/Fork计算过程,将1—1001数字相加 */ pr原创 2021-03-25 22:30:15 · 425 阅读 · 0 评论 -
Java泛型小结
一、普通的泛型比如我们经常使用的List data = new ArrayList;这里我们直接指定List中存储的是String类型的数据,避免在get的时候还要强制转换。1.来定义一个简单的泛型:public class MessageQueue<T> { private T mMsg = null; public T getMsg() { ...原创 2019-04-27 08:20:58 · 393 阅读 · 0 评论 -
Java使用wait()以及notifyAll()实现生产者消费者模型
之前已经简单介绍过wait()以及notifyAll()的使用,下面通过它们来实现进程间通信,从而解决生产者消费者问题。一、首先定义一个生产者线程生产者负责生产商品,每次生产一个商品之后都会通知消费者可以来取商品了,如果保存商品的队列满了则停止生产,等待消费者来取走商品。class MyProducer<T> extends Thread { private Queu...原创 2019-04-27 08:21:12 · 395 阅读 · 0 评论 -
Java线程中yield()方法的使用
yield()方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。注意:这里的其他也包含当前线程。1.首先继承Thread实现一个子类YieldTest,在它的run方法中执行yield()方法。class YieldTest extends Thread { public void run() { Thread.currentThread().setPriority...原创 2019-04-27 08:21:24 · 1511 阅读 · 0 评论 -
Java正则表达式
Java正则表达式简要笔记import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.regex.*;/** * 正则表达式 * * @param wxp */public class RegularExpression { public static void p(Obje...原创 2019-04-27 08:21:40 · 203 阅读 · 0 评论 -
Java并发-CyclicBarrier
CyclicBarrier是一种多线程并发控制实用工具。可以实现线程间的计数等待。CyclicBarrier翻译过来就是循环栅栏,可以用来阻止线程继续执行,要求线程在栅栏处等待。比如我们这里实现一个场景,有十个士兵要先集合再去执行任务。首先是士兵报道,所有人到齐之后才能去执行任务,然后每个人完成任务也要报告,所有人完成任务之后才能表示这个任务结束。1.看看如何创建一个CyclicBarrie...原创 2019-04-27 08:21:51 · 238 阅读 · 0 评论 -
Java并发-读写锁ReadWriteLock
读写锁是为了帮助解决多线程中读操作和写操作分离而设计的。想象一下,如果在系统中,读操作远远大于写操作,而每一次写操作进行时,别的写操作也要等待,这样对系统的性能会有很大的影响。ReadWriteLock是JDK5开始提供的读写分离锁。读写锁允许多个线程同时读,是的读线程可以真正的并行。但是考虑到数据的完整性,读操作和写操作是一定要互斥的。看一下读写锁的访问约束情况:ReadWri...原创 2019-04-27 08:22:02 · 347 阅读 · 0 评论 -
Java多线程-static synchronized 和 synchronized 修饰的方法的区别
一晃眼居然两个多月没写博客了,那这两个月究竟忙什么了呢。仔细想想好像也没干啥。大概是忙着灌药了吧。唉,以后还是多写点博客吧,不然感觉虚度光阴了。原创 2019-04-27 08:22:14 · 451 阅读 · 0 评论 -
Java多线程-ThreadLocal的使用
ThreadLocal的设计不是为了解决多线程之间的数据共享问题,而是为了实现了线程间的数据隔离。ThreadLocal 很残暴的在每个线程内部自己维护一个变量,你别的线程的数据我不要,我只管我自己的数据。这样的结果是降低了线程的同步的复杂度,但是内存使用也就上去了。是一种“以控件换空间”的方式。而已 “synchronized” 为代表的一系列线程同步方式,则是“以时间换空间”的方式。那就来看...原创 2019-04-27 08:22:25 · 303 阅读 · 0 评论 -
Java中 a=a+b 和 a+=b 的区别
千万不要放过任何一个小的知识点(一个这么小的点也可以拿来写一篇文章 哈?)首先网传 a+=b 的效率会比 a=a+b 的效率要高一点,但是我验证了一下,好像并没有这回事。运行 1000000000 次 a=a+1的时间和 a+=1的时间几乎差不多,而且有时候前者快,有时候后者快。这里就不讨论效率高低这个区别了。说一下另外一个很显著的区别: += 这个运算中包含了强制转换的操作。所以当我们把两...原创 2019-04-27 08:22:36 · 590 阅读 · 0 评论 -
Java 中的 IncompatibleClassChangeError 错误
最近发现了一个从来没遇到过的崩溃 IncompatibleClassChangeError ,出现这种错误的原因可能是因为jar包的代码发生了一些无法执行 二进制兼容 的变化。最有可能的是将非静态的成员变量或者方法变成了静态的,还有将私有的成员变量和方法变成了共有的。并且引用jar包的客户端没有重新编译源码。IncompatibleClassChangeError 这个错误只是二进制兼容问题其中...原创 2019-04-27 08:24:08 · 3659 阅读 · 0 评论 -
Java静态多态和动态多态
静态分派所有依赖静态类型来定位方法执行版本的分派动作,都称为静态分派,静态分派的最典型应用就是多态性中的方法重载。动态分派根据变量的实际类型来分派方法的执行版本的。而实际类型的确定需要在程序运行时才能确定下来,这种在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。单分派和多分派方法的接受者(亦即方法的调用者)与方法的参数统称为方法的宗量。单分派是根据一个宗量对目标方法进行选择...原创 2019-04-27 08:24:21 · 3651 阅读 · 2 评论 -
直接在终端对Java代码进行Debug
有时候写个小算法或者Demo时不想用IDE,直接打开Atom就可以写了。但是如果遇到bug,就只能在命令行终端调试了。下面看看如何在终端使用jdb调试Java代码。1. 编译准备使用 -g 参数编译Java代码: javac -g Test.java2. jdb初始化执行命令: jdb Test此时会显示:Sort wxp$ jdb Test正在初始化jdb...3. 设置断点 s原创 2016-08-09 00:40:36 · 4030 阅读 · 0 评论