多线程
文章平均质量分 72
BiggerLee
这个作者很懒,什么都没留下…
展开
-
java实现BlockingQueue队列
学习多线程的过程中用代码实现的BlockingQueue队列。阻塞队列实现类。package com.xtli.controller.thread;import java.util.LinkedList;public class BlockingQueueTest { LinkedList BQList = new LinkedList(); private int size = 0;原创 2017-05-05 13:09:11 · 480 阅读 · 0 评论 -
JAVA并发编程之基本概念
1、锁是对对象访问的时候,通过对对象加锁,防止并行访问的控制手段;对对象加锁成功,代表我持有这个对象的监视器,解锁,代表释放了这个对象的监视器。拿到对象的监视器,肯定是对对象加锁成功的;对对象加锁成功 ,程序可以主动Watiing或者Time_waiting在对象监视器上。2、锁与监视器区别参见以下文章 Java锁和监视器 java-jvm-jstack-(监视器和锁的概念) Syn...原创 2018-11-08 22:59:15 · 595 阅读 · 0 评论 -
Java concurrent包中常用的类
1、 Atomic类 基于 compareAndSwap,即CAS操作实现。 CAS指令有两个步骤:冲突检测和更新操作。 CAS指令需要3个操作数:内存位置(V),旧的预期值(A),新值(B)。CAS指令执行时,首先比较内存位置V处的值和A的值是否相等(冲突检测),如果相等,就用新值B覆盖A(更新操作),否则,就什么也不做。2、ConcurrentHashMap ...原创 2018-11-08 22:34:45 · 2118 阅读 · 0 评论 -
ReentrantLock源码之公平锁与非公平锁
ReentrantLock类与Synchronized关键字的主要区别之一就是可以实现公平锁和非公平锁。我们看下ReentrantLock类是如果实现公平锁与非公平锁的。1、非公平锁的实现ReentrantLock默认构造函数为非公平锁(为什么?因为非公平锁的实现可以减少线程的切换,提高执行效率。)public ReentrantLock() { sync = new...原创 2018-10-22 23:15:42 · 239 阅读 · 0 评论 -
ConcurrentHashMap源码之put和get方法
以下ConcurrentHashMap类是基于jdk1.7来分析。JDK1.7中ConcurrentHashMap是通过segments数组和HashEntry数组+链表来进行实现的。利用锁分段技术,支持任务数量线程的读和一定数量线程的写。我们看下ConcurrentHashMap是怎么进行put和get操作的。1、ConcurrentHashMap的put方法不能插入null值(为什...原创 2018-10-25 22:40:54 · 2558 阅读 · 0 评论 -
Java实现BlockingQueue队列(二)
之前写过Java实现阻塞队列 是以链表的形式实现的,最近闲着,又试了下数组形式的实现。直接上代码吧。package com.xtli.queue;import java.util.Random;/* * 阻塞队列。put方法,take方法。 * 数组实现。 * 定义队列的head和tail: * head 指向第一个值; * tail 指向最后一个为null的下标; * ...原创 2018-09-25 17:01:58 · 239 阅读 · 0 评论 -
sleep()与wait()
本文介绍sleep()与wait()方法。sleep()方法:线程睡眠 sleep()方法是Thread类的静态方法。 如果需要当前线程暂停一段时间,进入阻塞状态,则可以通过调用Thread类的静态sleep()方法来实现。 sleep()方法有两种重载形式: static void sleep(long mills):让当前正在执行原创 2017-06-02 14:30:58 · 417 阅读 · 0 评论 -
线程创建和启动:继承Thread类和实现Runnable接口
1、继承Thread类创建线程类 通过继承Thread类来创建并启动多线程: 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就是线程需要完成的任务,称为线程执行体。 创建Thread子类的实例,即创建了线程对象。 调用线程对象的start()方法来启动该线程。 package com.xtli.controller.CSDN.createTh原创 2017-06-02 17:02:58 · 401 阅读 · 0 评论 -
线程的状态学习
线程的生命周期: 线程要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。新建状态:当程序使用New关键字创建了一个线程之后,线程就处于新建状态,此时的线程不会执行线程的线程执行体。就绪状态:当线程对象调用了start()方法之后,该线程处于就绪护状态。此状态表示线程可以运行了(但并没有运行),该线程何时开始运行,取决于原创 2017-06-05 14:44:36 · 348 阅读 · 0 评论 -
ThreadLocal理解
ThreadLocal是线程的局部变量,实现原理是Thread类中有一个ThreadLocalMap类的threadlocals变量,此变量是属于当前线程的,key为代码中声明的ThreadLocal变量,value为线程要保存的变量副本(注意此副本的问题,每个线程使用时,必须是new 出来的新value)。之所以要用map这种数据结构,是因为代码中可能有多个ThreadLocal变...原创 2018-12-02 12:17:41 · 148 阅读 · 0 评论