看了《java编程思想 第4版》并发这一章,觉得有必要整理一下其中的概念。 并发为什么要并发? 比如因为IO操作遇到了阻塞,CPU可以转去执行其他线程,这时并发的优点就显示出来了:更高效的利用CPU,提高程序的响应速度。 Java的线程机制是抢占式的,会为每个线程分配时间片。 线程中断与上下文切换并发编程 - 多线程的代价及上下文切换 详细分析Java中断机制 基本的线程机制 使用Runnable和Thread创建线程:Defining and Starting a Thread 并发新特性—Executor框架与线程池(含代码) Java线程(七):Callable和Future 休眠(sleep)和让步(yield)会导致线程阻塞,CPU转而执行其他线程。对调用yield时,是在建议具有相同优先级的其他线程运行。 java之yield(),sleep(),wait()区别详解 线程优先级、后台线程关于Java的Daemon线程的理解 简谈Java的join()方法 JAVA 线程中的异常捕获 共享受限资源Java线程安全和非线程安全 synchronizedJava线程(二):线程同步synchronized和volatile Java线程(八):锁对象Lock-同步问题更完美的处理方式 java锁的种类以及辨析(一):自旋锁 Java 理论与实践: 正确使用 Volatile 变量 JAVA CAS原理深度分析 原子类Java 理论与实践: 流行的原子 竞态条件与临界区 线程本地存储ThreadLocalJava线程(篇外篇):线程本地变量ThreadLocal 一张图让你看懂JAVA线程间的状态转换 详细分析Java中断机制 stop()方法已经被废弃了。 如何停止一个正在运行的java线程 wait()会在等待时将当前任务挂起,等到notify()/notifyAll()发生时,任务才被唤醒。 调用sleep()、yield()时不会释放锁;调用wait()时线程被挂起,对象上的锁也会被释放。 wait()、notify()、notifyAll()属于类Object,不属于Thread。 只能在同步控制方法或者同步控制块(synchronized)中调用wait()、notify()、notifyAll()。而sleep()、yield()可以在非同步控制方法里使用。 notifyAll()比notify()更安全一些。使用notify()时,众多等待同一个锁的任务中只有一个会被唤醒。 Java Thread wait, notify and notifyAll Example Lock和ConditionJava线程(九):Condition-线程通信更高效的方式 死锁哲学家就餐问题 CountDownLatch,闭锁。 首先给该对象一个初始计数值,每个在该该对象上调用await()的任务会阻塞。当计数值到0时,所有因为await()而阻塞的任务都继续执行。 Java CountDownLatch应用 CyclicBarrier,关卡,栅栏。 Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例 Interface BlockingQueue Examples of DelayQueue in Java 这两个在java.util这个包下面。 Java线程(五):Timer和TimerTask ScheduledThreadPoolExecutorJava ScheduledThreadPoolExecutor延迟或周期性执行任务 Java 信号量 Semaphore 介绍 用于两个线程之间交换数据。 Java线程之Exchanger 性能调优 CopyOnWriteArrayList、CopyOnWriteArraySet在该类的对象中,写入将导致创建整个底层数组的副本,而原数组保留在原地,使得复制的数组在被修改时,读取操作可以安全的执行。当对副本的修改完成时,会发生一个原子性的操作:用副本替换源数组,使得新的读取操作可以看到这个新的修改。 Class CopyOnWriteArrayList 聊聊并发(四)——深入分析ConcurrentHashMap 悲观锁与乐观锁 适合读多写少的场景。 Java中的读/写锁 Java线程(三):线程协作-生产者/消费者问题 其他Java并发的四种风味:Thread、Executor、ForkJoin和Actor |
小黑屋|在路上
( 蜀ICP备15035742号-1 )
GMT+8, 2025-7-9 20:03
Copyright 2015-2025 djqfx