上一页 1 ··· 48 49 50 51 52 53 54 55 56 ··· 73 下一页
摘要: 我们知道多线程操作共享资源时,会出现三个问题:可见性、有序性以及原子性。 一般情况下,我们采用synchronized同步锁(独占锁、互斥锁),即同一时间只有一个线程能够修改共享变量,其他线程必须等待。但是这样的话就相当于单线程,体现不出来多线程的优势。 那么我们有没有另一种方式来解决这三个问题呢? 阅读全文
posted @ 2022-02-08 08:32 残城碎梦 阅读(711) 评论(0) 推荐(0) 编辑
摘要: 集合 ConcurrentHashMap HashMap 1.7 底层使用的数据结构是数组+链表,链表是为了解决hash碰撞的,相同的值插入,链表的插入采用的是头插法。多线程插入会出现循环链表问题。 HashMap 1.8 底层使用的数据结构是数组+链表+红黑树,链表是为了解决hash碰撞的,链表的 阅读全文
posted @ 2022-02-08 08:25 残城碎梦 阅读(84) 评论(0) 推荐(0) 编辑
摘要: ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。 常用方法: public static void main(String[] args) { //创建ThreadLoca 阅读全文
posted @ 2022-02-08 08:13 残城碎梦 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 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) 编辑
摘要: @RequestMapping注解是Spring MVC中最常用的一个注解,有必要掌握每一个属性。 value属性 由于value属性是@RequestMapping注释的默认属性,因此如果只有唯一的属性,则可以省略该属性名,如果有超过一个属性,则必须写上value属性名称。 value属性支持通配 阅读全文
posted @ 2022-01-27 12:59 残城碎梦 阅读(132) 评论(0) 推荐(0) 编辑
摘要: LinkedList的定义 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{} public clas 阅读全文
posted @ 2022-01-24 21:55 残城碎梦 阅读(96) 评论(0) 推荐(0) 编辑
摘要: Java编程规约 命名风格 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / __name / $name / name_ / name$ / name__ 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 阅读全文
posted @ 2022-01-24 21:54 残城碎梦 阅读(41) 评论(0) 推荐(0) 编辑
上一页 1 ··· 48 49 50 51 52 53 54 55 56 ··· 73 下一页