Java线程池源码解析

一、示例:通过Excutors工具类来创建一个固定的线程池。public class ThreadPoolDemo { public static void main(String[] args) { ExecutorService pool = Executors.newFixe...

2018-05-14 18:31:01

阅读数 44

评论数 0

ReentranLock(非公平锁)源码分析

1、lock()方法final void lock() { if (compareAndSetState(0, 1))//先假设锁是空闲的,尝试获取锁 setExclusiveOwnerThread(Thread.currentThread(...

2018-05-12 22:38:31

阅读数 50

评论数 0

ReentrantLock源码解析( 释放公平锁)

1、unlock()  public void unlock() {         sync.release(1);     }unlock()调用的release()方法,方法中参数传入1。跟获取锁一样,每调用一次unlock(),锁的状态减1,当锁的状态等于0时,将会唤醒队列中的下一个节点。...

2018-05-12 20:31:17

阅读数 93

评论数 0

ReentrantLock源码分析(公平锁)

ReentranLock通过lock来获取锁,下面就通过lock来分析公平锁的过程1、lock()方法 final void lock() { acquire(1); }lock()方法通过acquire()方法来获取锁,acquire()方法中的参数是用来...

2018-05-12 18:24:00

阅读数 51

评论数 0

Mac环境下安装RabbitMQ

1、官网下载RabbitMQ,直接在官网下载压缩包,然后在本地解压。下载地址:RabbitMQ下载地址2、在启动RabbitMQ之前,确保是否安装有openssl,且版本为1.x以上。2.1、查看命令:openssl version结果:2.2 、当openssl的版本小于1.x时,需要升级ope...

2018-05-05 16:52:14

阅读数 176

评论数 0

Java 重入锁:ReentrantLock

ReentrantLook是一个可重入的互斥锁(独占锁)。可重入是指锁可以被单个线程多次获取,而互斥指在同一个时间只能被一条线程占有。ReentranLook分为公平锁和非公平锁,它们的区别是获取锁的机制上是否公平。ReentrantLook通过一个队列来维护获取该锁的线程,如果是公平锁,则线程会...

2018-04-26 23:30:57

阅读数 41

评论数 0

Java Thread.join()方法

join()方法:让主线程等待它的子线程死亡。即在一个线程中启动新的线程,如果子线程调用了join方法,主线程会等子线程死亡后才会继续往下运行。例子:public class ThreadJoin extends Thread{ public void run() { try{ S...

2018-04-18 09:22:47

阅读数 33

评论数 0

Java Thread.sleep方法介绍

sleep(long)方法介绍程序执行sleep()方法后,线程由运行状态进入阻塞状态,阻塞的时间由传入的时间决定。时间过期后,线程变成就绪状态,等待cpu的调度。sleep()方法如果在同步模块中执行,执行sleep()方法后,不会释放锁。public class ThreadSleep ext...

2018-04-15 21:56:40

阅读数 114

评论数 0

Java Thread.yield方法

yield方法:让线程从运行状态进入到就绪状态,让其它相同优先级的线程获取执行权,但是执行yield()方法后,其它线程不一定会获取到执行权,也有可能当前线程能重新获取到执行权。如果yield()方法在同步模块中,执行yield()方法后,不会有锁的释放。public class ThreadYi...

2018-04-15 20:33:44

阅读数 78

评论数 0

Java中wait()与notify()方法的使用

wait()、notify()方法介绍1、wait()方法:让当前线程(持有锁的线程)处于等待(阻塞)的状态,并且释放它持有的锁。该线程将处于阻塞状态,直到其它线程调用notify()或者notifyAll()方法唤醒,线程进入就绪状态。2、wait(long):让当前线程(持有锁的线程)处于等待...

2018-04-15 19:22:39

阅读数 42

评论数 0

Java多线程run方法与start方法比较

一、start()方法与run()方法比较1、start():当前线程调用start()方法,另一个线程去执行run()方法。start方法不能多次执行。一个线程执行完之后不能重新启动。2、run():与普通方法一样,可以重复调用。如果直接调用run方法,不会新建线程去执行run方法,会在当前线程...

2018-04-14 18:20:47

阅读数 36

评论数 0

Java创建线程的两种方式

一、继承Thread类public class MyThread extends Thread { private int num = 10; private int i = 1; public MyThread(String name){ super(name); } pub...

2018-04-14 17:23:57

阅读数 32

评论数 0

Java线程状态

Java线程总共有6中状态 /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a...

2018-04-14 16:38:38

阅读数 61

评论数 0

基于Java软引用实现的高速缓存

package com.ssitcloud.nettyserver; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.util.concurrent.ConcurrentHa...

2018-04-14 15:21:59

阅读数 177

评论数 0

JVM垃圾回收算法

1、标记-清除算法算法分为两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收所有被标记的对象。标记-清除算法有两个缺点:一是效率问题,标记和清除的效率都不高,另一个是空间问题,标记清除之后会产生大量的不连续的内存碎片。空间碎片过多会导致程序运行过程中,如果有大对象产生,将无法找到足够大...

2018-04-07 18:44:18

阅读数 37

评论数 0

红黑树深入解析和Java实现

红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。BST二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大。它的高度决定了它的查找效率。在理想的情况下,二叉查找树增删查改的时间复杂度...

2018-03-09 18:07:45

阅读数 57

评论数 0

关于Redis遇到的问题

1、初始化连接池报异常:Connection refused: connect 参考方案:注释掉配置文件中的:bind 127.0.0.1。参考链接:https://www.oschina.net/question/579073_1130042、注释掉绑定本地链接后,接着又报...

2018-03-06 15:28:33

阅读数 389

评论数 0

Linux 环境下安装Redis

1、下载Redis安装包,通过官方网址下载压缩包通过命令来获取wget http://download.redis.io/releases/redis-4.0.8.tar.gz2、将压缩包复制到到:/usr/localcp redis-4.0.8.rar.gz /usr/local3、解压压缩包t...

2018-03-06 10:36:56

阅读数 63

评论数 0

HashMap源码解析

HashMap简介JAVA集合中有两种基本数据结构:数组、链表。数组的特点是查询快,删除、增加慢,因为在删除元素时需要移动元素;链表恰恰相反,查询慢,删除快,因为查询元素时是从表头或者表尾轮询查询元素,删除元素时,只需要修改该元素的上一个元素指向它的下一个元素。HashMap是一个散列表(哈希表)...

2018-02-27 23:00:34

阅读数 79

评论数 0

关于2的补码

转载于:关于2的补码,阮一峰的网络日志问一个基本的问题。 负数在计算机中如何...

2018-02-08 11:00:37

阅读数 942

评论数 0

提示
确定要删除当前文章?
取消 删除