初识Java多线程编程

本文主要介绍下线程的相关概念,以及Java中关于多线程的标准类库java.lang.Thread的相关知识。

我们知道进程是程序的运行实例,当我们在操作系统上运行一个程序时,相当于新建了一个进程。那线程是什么呢?线程是操作系统能够进行运算调度的最小单位,一个进程可以包含多个线程。

线程和进程的区别如下:

  1. 进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位。线程(Thread)是进程中可独立执行的最小单位。
  2. 一个进程可以包含多个线程。
  3. 同一个进程中的所有线程共享该进程中的资源,如内存空间、文件句柄等。
阅读更多...

使用PriorityQueue实现堆

本文转自:[PriorityQueue]:Java中PriorityQueue的用法

不指定Comparator时默认为最小堆,通过传入自定义的Comparator函数可以实现大顶堆。

1
2
3
4
5
6
7
8
9
PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(); //小顶堆,默认容量为11
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(11,new Comparator<Integer>(){ //大顶堆,容量11
@Override
public int compare(Integer i1,Integer i2){
return i2-i1;
}
});
//Comparator也可以使用lambda实现
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(11, (Integer o1, Integer o2)->o2-o1);
阅读更多...

Map接口

本文主要介绍Map接口下的HashMap,TreeMap,HashTable,LinkedHashMap,ConcurrentHashMap五个类。

对比这5种Map结构,其中HashMap和ConcurrentHashMap最为常用,前者用于单线程,后者用于多线程。

TreeMap和LinkedHashMap可以看做两种有特殊用途的Map结构,前者是基于红黑树构造的有序Map,后者在HashMap的基础上多维护了一个双向链表,记录Map中元素顺序(有插入顺序和访问顺序两种,可用于实现LRUCache之类的需求)。

阅读更多...

Collection子接口之Queue

Queue是单端队列,只能从一端插入元素,另一端删除元素,实现上一般遵循 先进先出(FIFO) 规则。 Queue接口下面又一个子接口Deque,是双端队列, 在队列的两端均可以插入或删除元素。

ArrayDeque和LinkedList实现了Deque接口,PriorityQueue和LinkedList实现了Queue接口。下面主要介绍ArrayDeque和PriorityQueue两个类。

阅读更多...
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信