摘要: java.uitl.concurrent.ThreadPoolExecutor 类是 Executor 框架中最核心的类。 线程池简介 什么是线程池 线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待 阅读全文
posted @ 2022-02-07 18:10 残城碎梦 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 在java中我们想在新线程中执行一个任务很简单,有以下两种方式: // 1. 将任务放在Runnable的run方法中 Thread thread = new Thread(new Runnable() { @Override public void run() { // 执行任务 } }); th 阅读全文
posted @ 2022-02-07 17:26 残城碎梦 阅读(54) 评论(0) 推荐(0) 编辑
摘要: Executors类主要用于提供线程池相关的操作,它提供了一系列工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口。 Executors的几种线程池实现 5个,分别如下: newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收 阅读全文
posted @ 2022-02-07 17:08 残城碎梦 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 线程可以通过Java中的wait(),notify()和notifyAll()方法相互通信。 这些是在Object类中定义的最终方法,只能在同步上下文中调用。 wait()方法使当前线程等待,直到另一个线程对该对象调用notify()或notifyAll()方法。 notify()方法唤醒一个正在该 阅读全文
posted @ 2022-02-07 16:30 残城碎梦 阅读(376) 评论(0) 推荐(0) 编辑
摘要: Java中线程的状态分为6种。 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状 阅读全文
posted @ 2022-02-07 15:56 残城碎梦 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 在Java中有多种方式可以实现多线程编程: 继承Thread类并重写run方法; 实现Runnable接口,并将这个类的实例当做一个target构造Thread类; 实现Callable接口; 继承Thread类 通过继承Thread类来实现多线程编程很容易。下面代码中MyThread类继承了Thr 阅读全文
posted @ 2022-02-07 15:47 残城碎梦 阅读(181) 评论(0) 推荐(0) 编辑
摘要: Thread类是Java中实现多线程编程的基础类。本节就来介绍下Thread类的常用API和常见用法。 常用方法 Thread.activeCount():这个方法用于返回当前线程的线程组中活动线程的数量,返回的值只是一个估计值,因为当此方法遍历内部数据结构时,线程数可能会动态更改。)。 Threa 阅读全文
posted @ 2022-02-07 15:36 残城碎梦 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 多线程是Java编程中一块非常重要的内容,其中涉及到很多概念。这些概念我们平时经常挂在嘴上,但是真的要让你介绍下这些概念,你可能还真的讲不清楚。本篇就总结下多线程编程中经常用到的概念,理解这些概念能帮助我们更好地掌握多线程编程。 进程(Process)与线程(Thread) 进程和线程是最常提到的概 阅读全文
posted @ 2022-02-07 14:51 残城碎梦 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 线程是程序执行的最小单元,多线程是指程序同一时间可以有多个执行单元运行(这个与你的CPU核心有关)。 在java中开启一个新线程非常简单,创建一个Thread对象,然后调用它的start方法,一个新线程就开启了。 那么执行代码放在哪里呢?有两种方式: ① 创建Thread对象时,复写它的run方法, 阅读全文
posted @ 2022-02-07 13:16 残城碎梦 阅读(50) 评论(0) 推荐(0) 编辑
摘要: LinkedList的定义 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{} public clas 阅读全文
posted @ 2022-02-07 11:42 残城碎梦 阅读(84) 评论(0) 推荐(0) 编辑
摘要: Vector集合是 jdk1.0 版本就提供的集合类,它的所有操作集合的方法,都进行了加锁(就是对方法使用synchronized修饰)。这样就可以防止多线程同时修改集合。 因为是方法级synchronized锁,那么Vector集合的效率就不高。而且使用了Vector集合并不一定在多线程情况下就没 阅读全文
posted @ 2022-02-07 11:28 残城碎梦 阅读(165) 评论(0) 推荐(0) 编辑
摘要: Map接口 Map集合是用键值对作为存储元素的集合,所以它可以通过key值来操作集合中的键值对元素。 public interface Map<K,V> {} 可以注意到Map接口是一个顶层接口,与Collection没有任何联系,甚至它都没有继承Iterable接口,说明Map是不可迭代的。但是M 阅读全文
posted @ 2022-02-07 11:24 残城碎梦 阅读(155) 评论(0) 推荐(0) 编辑
摘要: HashSet的源码非常简单,它就是借用HashMap来实现相应的功能。 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable 可以看出它继承自Abstrac 阅读全文
posted @ 2022-02-07 11:03 残城碎梦 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 前言知识 哈希化 用位运算实现哈希化 我们知道HashMap是基于哈希表实现的,而且是链地址法实现的哈希表(即数组加链表的形式)。 哈希表的关键是哈希化,就是将很大的哈希值转化变成一定区间范围内的值,我们能够马上想到的就是采用取余%操作来实现哈希化的。但是我们知道取余%是非常耗费性能的,尽量不要使用 阅读全文
posted @ 2022-02-07 09:23 残城碎梦 阅读(134) 评论(0) 推荐(0) 编辑