随笔分类 -  Java并发编程_bak

摘要:Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方 阅读全文
posted @ 2022-02-08 10:34 残城碎梦 阅读(300) 评论(0) 推荐(0) 编辑
摘要:在JDK1.5已经提供了Future和Callable的实现,可以用于阻塞式获取结果,如果想要异步获取结果,通常都会以轮询的方式去获取结果,如下: //定义一个异步任务 Future<String> future = executor.submit(()->{ Thread.sleep(2000); 阅读全文
posted @ 2022-02-08 09:25 残城碎梦 阅读(77) 评论(0) 推荐(0) 编辑
摘要:当我们创建一个线程时,我们想获取线程运行完成后的结果,一般使用回调的方式。例如: interface Callable { void call(int num); } public class FutureTest { public static void main(String[] args) { 阅读全文
posted @ 2022-02-08 08:43 残城碎梦 阅读(50) 评论(0) 推荐(0) 编辑
摘要:我们知道多线程操作共享资源时,会出现三个问题:可见性、有序性以及原子性。 一般情况下,我们采用synchronized同步锁(独占锁、互斥锁),即同一时间只有一个线程能够修改共享变量,其他线程必须等待。但是这样的话就相当于单线程,体现不出来多线程的优势。 那么我们有没有另一种方式来解决这三个问题呢? 阅读全文
posted @ 2022-02-08 08:32 残城碎梦 阅读(771) 评论(0) 推荐(0) 编辑
摘要:集合 ConcurrentHashMap HashMap 1.7 底层使用的数据结构是数组+链表,链表是为了解决hash碰撞的,相同的值插入,链表的插入采用的是头插法。多线程插入会出现循环链表问题。 HashMap 1.8 底层使用的数据结构是数组+链表+红黑树,链表是为了解决hash碰撞的,链表的 阅读全文
posted @ 2022-02-08 08:25 残城碎梦 阅读(90) 评论(0) 推荐(0) 编辑
摘要:ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。 常用方法: public static void main(String[] args) { //创建ThreadLoca 阅读全文
posted @ 2022-02-08 08:13 残城碎梦 阅读(472) 评论(0) 推荐(0) 编辑
摘要:java.uitl.concurrent.ThreadPoolExecutor 类是 Executor 框架中最核心的类。 线程池简介 什么是线程池 线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待 阅读全文
posted @ 2022-02-07 18:10 残城碎梦 阅读(117) 评论(0) 推荐(0) 编辑
摘要:在java中我们想在新线程中执行一个任务很简单,有以下两种方式: // 1. 将任务放在Runnable的run方法中 Thread thread = new Thread(new Runnable() { @Override public void run() { // 执行任务 } }); th 阅读全文
posted @ 2022-02-07 17:26 残城碎梦 阅读(80) 评论(0) 推荐(0) 编辑
摘要:Executors类主要用于提供线程池相关的操作,它提供了一系列工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口。 Executors的几种线程池实现 5个,分别如下: newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收 阅读全文
posted @ 2022-02-07 17:08 残城碎梦 阅读(153) 评论(0) 推荐(0) 编辑
摘要:线程可以通过Java中的wait(),notify()和notifyAll()方法相互通信。 这些是在Object类中定义的最终方法,只能在同步上下文中调用。 wait()方法使当前线程等待,直到另一个线程对该对象调用notify()或notifyAll()方法。 notify()方法唤醒一个正在该 阅读全文
posted @ 2022-02-07 16:30 残城碎梦 阅读(444) 评论(0) 推荐(0) 编辑
摘要:Java中线程的状态分为6种。 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状 阅读全文
posted @ 2022-02-07 15:56 残城碎梦 阅读(200) 评论(0) 推荐(0) 编辑
摘要:在Java中有多种方式可以实现多线程编程: 继承Thread类并重写run方法; 实现Runnable接口,并将这个类的实例当做一个target构造Thread类; 实现Callable接口; 继承Thread类 通过继承Thread类来实现多线程编程很容易。下面代码中MyThread类继承了Thr 阅读全文
posted @ 2022-02-07 15:47 残城碎梦 阅读(199) 评论(0) 推荐(0) 编辑
摘要:Thread类是Java中实现多线程编程的基础类。本节就来介绍下Thread类的常用API和常见用法。 常用方法 Thread.activeCount():这个方法用于返回当前线程的线程组中活动线程的数量,返回的值只是一个估计值,因为当此方法遍历内部数据结构时,线程数可能会动态更改。)。 Threa 阅读全文
posted @ 2022-02-07 15:36 残城碎梦 阅读(458) 评论(0) 推荐(0) 编辑
摘要:多线程是Java编程中一块非常重要的内容,其中涉及到很多概念。这些概念我们平时经常挂在嘴上,但是真的要让你介绍下这些概念,你可能还真的讲不清楚。本篇就总结下多线程编程中经常用到的概念,理解这些概念能帮助我们更好地掌握多线程编程。 进程(Process)与线程(Thread) 进程和线程是最常提到的概 阅读全文
posted @ 2022-02-07 14:51 残城碎梦 阅读(124) 评论(0) 推荐(0) 编辑
摘要:线程是程序执行的最小单元,多线程是指程序同一时间可以有多个执行单元运行(这个与你的CPU核心有关)。 在java中开启一个新线程非常简单,创建一个Thread对象,然后调用它的start方法,一个新线程就开启了。 那么执行代码放在哪里呢?有两种方式: ① 创建Thread对象时,复写它的run方法, 阅读全文
posted @ 2022-02-07 13:16 残城碎梦 阅读(53) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal简介 ThreadLocal就是一个类,它有get、set方法,可以起到一个保存、获取某个值的作用。但是这个类的get、set方法有点特殊,各个线程调用时是互不干扰的(变量副本),就好像线程在操作ThreadLocal对象时是在操作线程自己的私有属性一样。具体原因在于他的方法实 阅读全文
posted @ 2022-01-12 21:06 残城碎梦 阅读(76) 评论(0) 推荐(0) 编辑
摘要:ScheduledExecutorService接口列表: scheduleAtFixedRate方法定义及参数说明 public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long per 阅读全文
posted @ 2021-07-22 23:02 残城碎梦 阅读(709) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示