并发编程基础整理
向阳居士
这个作者很懒,什么都没留下…
展开
-
原子类
什么是原子类 以前认为原子是不可分割的最小单位。故原子类可以认为其操作时不可分割的。 为什么要有原子类 对多线程访问同一变量,我们需要加锁,而锁是比较消耗性能的,jdk1.5之后,新增的原子操作类提供了一种简单、性能高效、线程安全地更新一个变量的方式,这些类同样位于juc包下的atomic包下,发展到jdk1.8,该报共有17个类,囊括了原子更新基本类型、原子更新数组、原子更...原创 2019-02-19 20:11:52 · 7655 阅读 · 2 评论 -
线程池及Executor框架
为什么要使用线程池? 诸如web服务器、数据库服务器、文件服务器或邮件服务之类的许多服务器应用程序都面向处理来自远程的大量短小的任务。请求以某种方式到达服务器,这种方式可以通过网络协议(HTTP、FTP)通过JMS队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序经常出现的情况是:单个任务处理的时间很短而请求的数目却巨大。如果每一个请求到达就创建一个新的线程,然后在新线程中处理...原创 2019-02-26 14:47:19 · 272 阅读 · 0 评论 -
并发工具类CountDownLatch、CyclicBarrier、Semaphore 、Exchanger
CountDownLatch await(),进入等待的状态 countDown,计数器减一 简单例子 某些代码需要等待其他的一系列线程执行完毕后才能执行,如下实现当for循环中的线程执行完后打印出多线程执行完毕。import java.util.concurrent.CountDownLatch;/** * */public class CountDo...原创 2019-02-19 20:11:08 · 424 阅读 · 0 评论 -
并发容器
同步容器与并发容器 Vector、HashTable -- JDK提供的同步容器类 Collections.synchronizedXXX本质是对相应的容器进行包装 同步容器类的缺点 在单独使用里面的方法的时候,可以保证线程安全,但是,复合操作需要额外加锁来保证线程安全,使用Iterator迭代容器 或使用for-each遍历...原创 2019-02-19 20:12:27 · 847 阅读 · 2 评论 -
读写锁
读写锁的特性读读是共享的。读写,写写是互斥的。1.读读互斥例子import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReentrantReadWriteLockDemo { private int i = ...原创 2019-01-23 09:47:23 · 3693 阅读 · 0 评论 -
线程的中断操作
1.stop()方法已经弃用,一但调用会立刻停止线程释放资源,容易产生线程安全性问题。2.Thread.interrupt()方法使用该中断方式,往往和while (!Thread.currentThread().isInterrupted())配套使用,根据中断状态来判断是否继续执行public class InterruptDemo implements Runnable{...原创 2019-01-22 09:38:52 · 278 阅读 · 0 评论 -
单例与线程安全
饿汉式--本身线程安全 在类加载的时候,已经进行实例化/** * 饿汉式单例 * 类加载的时候就实例化 */public class HungerSingleton { private static HungerSingleton ourInstant = new HungerSingleton(); public static HungerSing...原创 2019-01-22 09:40:38 · 566 阅读 · 0 评论 -
守护线程
1.线程分类用户线程:用户线程没有运行完成,程序就不会退出。守护线程:任何一个守护线程都是整个程序中所有用户线程的守护者,守护线程会跟随用户线程活着,如果最后一个用户线程运行完成,守护线程就会跟着最后一个用户线程一起结束。守护线程的用处?jvm垃圾清理线程一个简单的守护线程Demopublic class DaemonDemo implements Runnable{ ...原创 2019-01-22 09:39:54 · 119 阅读 · 0 评论 -
线程的挂起
1.什么是线程的挂起? 线程的挂起操作实质上就是线程进入"非可执行"状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行。 线程挂起后,可以通过重新唤醒线程来使之恢复运行。2.为什么要挂起线程? cpu分配的线程片非常的短、同时也非常珍贵。避免资源的浪费。3.挂起线程的方法?( 1、废弃的方法 thread.suspen...原创 2019-01-22 09:39:26 · 16499 阅读 · 0 评论