文章分类 -  Java多线程

摘要:Java 并发编程之同步队列与等待队列 在上一篇博客中,我简单的介绍了对 Condition 和 ReentrantLock 的使用,但是想要更好的掌握多线程编程,单单会用是不够的。这篇我会针对 Condition 方法中的 await 和 signal 的实现原理来梳理一下我的理解。 首先我们需要 阅读全文
posted @ 2020-06-06 10:18 别再闹了 阅读(1701) 评论(0) 推荐(0)
摘要:Java NIO 教程 MappedByteBuffer 之前跟大家说过,要讲 MappedByteBuffer, 现在我来履行承诺了。 首先从大体上讲一下 MappedByteBuffer 究竟是什么。从继承结构上来讲,MappedByteBuffer 继承自 ByteBuffer,所以 Byte 阅读全文
posted @ 2020-06-04 22:42 别再闹了 阅读(3947) 评论(0) 推荐(0)
摘要:说说线程安全包装: Collections.synchronizedList java 集合工具类 Collections.synchronizedList 提供了集合的线程安全包装方法。 那么它是如何让一个集合变成线程安全的呢?为什么说这种线程安全集合的实现效率非常低下? synchronized 阅读全文
posted @ 2020-06-03 16:55 别再闹了 阅读(1003) 评论(0) 推荐(0)
摘要:Java多线程调用静态方法的线程安全和性能分析 线程安全 多个线程调用静态方法,是否会出现并发问题取决于,静态方法内部是否需要引用共享区内的静态变量。当线程调用静态方法时,都会创建一套临时变量,可见性是在这个线程内部,所以当多个线程调用静态方法时,并且这个静态方法没有引用外部静态变量的。不会有线程并 阅读全文
posted @ 2020-05-22 17:51 别再闹了 阅读(1559) 评论(0) 推荐(0)
摘要:ReentrantLock 的实现原理 什么是 AQS AQS 即是 AbstractQueuedSynchronizer,一个用来构建锁和同步工具的框架,包括常用的 ReentrantLock、CountDownLatch、Semaphore 等。 AQS 没有锁之类的概念,它有个 state 变 阅读全文
posted @ 2020-04-12 10:55 别再闹了 阅读(166) 评论(0) 推荐(0)
摘要:Java线程间通信的方式 线程间的通信方式 ①同步 这里讲的同步是指多个线程通过 synchronized 关键字这种方式来实现线程间的通信。 参考示例: " " ;) " " ;) 由于线程 A 和线程 B 持有同一个 MyObject 类的对象 object,尽管这两个线程需要调用不同的方法,但 阅读全文
posted @ 2020-04-07 20:50 别再闹了 阅读(237) 评论(0) 推荐(0)
摘要:Java 并发编程之 Condition和Object监视器详解 简介 在 Java 程序中,任意一个 Java 对象,都拥有一组监视器方法(定义在 java.lang.Object 类上),主要包括 wait()、wait(long)、notify()、notifyAll() 方法,这些方法与 s 阅读全文
posted @ 2020-03-29 11:31 别再闹了 阅读(918) 评论(0) 推荐(1)
摘要:Java 并发编程之 Condition 详解 简介 在 Java 程序中,任意一个 Java 对象,都拥有一组监视器方法(定义在 java.lang.Object 类上),主要包括 wait()、wait(long)、notify()、notifyAll() 方法,这些方法与 synchroniz 阅读全文
posted @ 2020-03-29 01:34 别再闹了 阅读(1192) 评论(0) 推荐(1)
摘要:Java 并发编程:阻塞队列 Java 并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器 (Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外 阅读全文
posted @ 2020-03-29 01:22 别再闹了 阅读(175) 评论(0) 推荐(0)
摘要:Java 并发编程:并发容器之 CopyOnWriteArrayList Java 并发编程:并发容器之 CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java copy on write/ Copy On Write 简称 COW,是一种用于程序设 阅读全文
posted @ 2020-03-28 22:28 别再闹了 阅读(154) 评论(0) 推荐(0)
摘要:Java线程内存模型,线程、工作内存、主内存 java线程内存模型 线程、工作内存、主内存三者之间的交互关系图: 所有线程共享主内存,每个线程有自己的工作内存(cache) 产生线程安全的原因 线程的working memory是cpu的寄存器和高速缓存的抽象描述 :现在的计算机,cpu在计算的时候 阅读全文
posted @ 2020-03-28 20:51 别再闹了 阅读(736) 评论(0) 推荐(0)
摘要:Java线程、进程和JVM之间的关系 Java编写的程序都运行在在Java虚拟机(JVM)中 每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。 在这个JVM环境中,所有程序代码的运行都是以线程来运行的。 JVM找到程序程序的入口点 阅读全文
posted @ 2020-03-28 17:35 别再闹了 阅读(2855) 评论(0) 推荐(0)
摘要:Java 不可重入锁和可重入锁理解 基础知识 Java 多线程的 wait() 方法和 notify() 方法 这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的 monitor(俗称 “锁”),否则会抛出 IllegalMonitorStateException 阅读全文
posted @ 2020-03-26 00:34 别再闹了 阅读(515) 评论(0) 推荐(0)
摘要:Java 单例模式的双重检测 \1. 一般的单例模式如下: class Singleton{ private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(sin 阅读全文
posted @ 2020-03-24 10:45 别再闹了 阅读(2826) 评论(2) 推荐(1)
摘要:Java 并发编程:Callable、Future 和 FutureTask Java 并发编程:Callable、Future 和 FutureTask 在前面的文章中我们讲述了创建线程的 2 种方式,一种是直接继承 Thread,另外一种就是实现 Runnable 接口。 这 2 种方式都有一个 阅读全文
posted @ 2020-03-18 22:04 别再闹了 阅读(150) 评论(0) 推荐(0)
摘要:Java多线程:原子量 所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。 Java5之后 阅读全文
posted @ 2020-03-18 21:11 别再闹了 阅读(209) 评论(0) 推荐(0)
摘要:Java多线程:条件变量 条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明, 这里的条件是没有实际含义的,仅仅是个标记而已 ,并且 条件的含义往往通过代码来赋予其含义 。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.u 阅读全文
posted @ 2020-03-18 20:44 别再闹了 阅读(1353) 评论(0) 推荐(0)
摘要:Java阻塞队列 阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是, 一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。 同样,当队列为空时候,请求队列元素的操作同 阅读全文
posted @ 2020-03-18 20:06 别再闹了 阅读(195) 评论(0) 推荐(0)
摘要:Java中Semaphore(信号量)的使用 Semaphore 的作用: 在 java 中,使用了 synchronized 关键字和 Lock 锁实现了资源的并发访问控制,在同一时间只允许唯一了线程进入临界区访问资源 (读锁除外),这样子控制的主要目的是为了解决多个线程并发同一资源造成的数据不一 阅读全文
posted @ 2020-03-18 20:00 别再闹了 阅读(13396) 评论(0) 推荐(1)
摘要:公平锁和非公平锁 1. 若在释放锁的时候总是没有新的兔子来打扰,则非公平锁等于公平锁; 2. 若释放锁的时候,正好一个线程请求获得锁,而此时位于队列头的线程还没有被唤醒(因为线程上下文切换是需要不少开销的),此时后来的线程则优先获得锁,成功打破公平,成为非公平锁; 其实对于非公平锁,只要线程进入了等 阅读全文
posted @ 2020-03-18 19:33 别再闹了 阅读(152) 评论(0) 推荐(0)