05 2020 档案
摘要:@SuppressWarnings("unchecked") public class CircleDeque<E> { private int front; private int size; private E[] elements; private static final int DEFAU
阅读全文
摘要:一、概念: 循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用 二、代码实现: @SuppressWarnings("unchecked") public class CircleQueue<E> { private int front; private i
阅读全文
摘要:一、相关概念: (Deque)双端队列能够在队头、队尾进行添加、删除等操作 二、接口设计: 三、代码实现 public class Deque<E> { private List<E> list = new LinkedList<>();//引入自己实现的类 public int size() {
阅读全文
摘要:一、什么是队列 队列是一种特殊的线性表,只能在头尾两端进行操作,特点是先进先出;就像排队买票一样,先来的先买 二、接口设计 三、代码实现 可以使用动态数组、链表等实现;这里两种实现栈与双向链表 1、栈 public class Queue { private Stack<Integer> inSta
阅读全文
摘要:一、什么是栈 栈是一种线性结构,栈的特点就是先进后出(FILO);就像弹夹装子弹一样,最先压进去的在最底下,最后才被射出。 二、相关接口设计 三、栈的实现 栈可以用之前的数组、链表等设计,这里我使用动态数组实现(在之前自己写的,不是jdk自带的) public class Stack<E> { pr
阅读全文
摘要:双向循环链表跟单向链表一样,都是头尾相连,不过单向是尾指向头,双向是头尾互相指,可以从前往后查,也可以从后往前查 无头结点的双向循环链表 public class CircleLinkedList<E> extends AbstractList<E> { private Node<E> first;
阅读全文
摘要:单循环链表与单链表的不同是,单循环链表尾结点的next指向第一个结点(或头结点) 代码: 无头结点: public class SingleCircleLinkedList<E> extends AbstractList<E> { private Node<E> first; private sta
阅读全文
摘要:在之前我们封装了一些操作在接口类中,并在抽象类实现了相同的方法。下面我们开始写代码: 无头结点单链表:(注意下面的AbstractList是之前抽取的类,不是java.util包下的类) public class SingleLinkedList<E> extends AbstractList<E>
阅读全文
摘要:一、ArrayList是线程不安全的,可以使用以下操作解决: 1.使用相同功能的集合类替换,比如Vector集合是线程安全的,他们实现的接口都是一样的,但是Vector类是在jdk1.0出现的,不推荐使用 2.使用 java.util.Collections类里面的静态方法synchronizedX
阅读全文
摘要:二、线程间定制化调用通信 要使多线程之间按顺序调用,实现A->B->C按顺序输出,使用Lock锁实现,通过Lock锁创建三个Condition实例(三把钥匙),通过不同的条件,调用不同钥匙的awite()跟singnal()方法,阻塞或唤醒其他线程 代码实现: package com.jenne.m
阅读全文
摘要:一、普通的线程间通信 1.synchronized实现 package com.jenne.mydemo; class ShareDataOne { private int number = 0; public synchronized void incr() { try { //判断 while
阅读全文
摘要:1.读写锁 分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁! WriteLock
阅读全文
摘要:1.什么是锁 在以前实现多线程的同步操作时,都是添加synchronized关键字或者synchronized代码块;而锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。 2.核心方法 3.代码实现 1 packa
阅读全文
摘要:一、java.util.concurrent.CountDownLatch 减少计数 1.执行原理: ①。CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。 ②。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞
阅读全文
摘要:一、什么是阻塞队列 阻塞队列是一个队列,在数据结构中起的作用如上图;当队列是空的,从队列中获取元素的操作将会被阻塞;当队列是满的,从队列中添加元素的操作将会被阻塞 1.为什么需要BlockingQueue: 好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQ
阅读全文
摘要:一、继承Thread类 1 package com.jenne.mydemo; 2 3 public class TestMyThread { 4 public static void main(String[] args) { 5 6 //启动两个线程 7 MyThread my1 = new M
阅读全文

浙公网安备 33010602011771号