上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 33 下一页
摘要: IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。 Java 中是通过流处理IO 的,那么什么是流? 流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。 当程序需要读取数据的时候, 阅读全文
posted @ 2024-07-31 15:56 _Sylvan 阅读(34) 评论(0) 推荐(0)
摘要: 生产者-消费者,实际上包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为;而消费者只需要从共享数据区中获取数据,不需要关心生产者的行为。如果共享数据区 阅读全文
posted @ 2024-07-29 11:34 _Sylvan 阅读(41) 评论(0) 推荐(0)
摘要: ArrayList 是一个线程不安全的容器,如果在多线程环境下使用,需要手动加锁,或者使用 Collections.synchronizedList() 方法将其转换为线程安全的容器。否则,将会出现 ConcurrentModificationException 异常。 CopyOnWriteArr 阅读全文
posted @ 2024-07-29 10:30 _Sylvan 阅读(53) 评论(0) 推荐(0)
摘要: ConcurrentHashMap 是 Java 并发包 (java.util.concurrent) 中的一种线程安全的哈希表实现。 HashMap 在多线程环境下扩容会出现 CPU 接近 100% 的情况,因为 HashMap 并不是线程安全的,我们可以通过 Collections 的Map<K 阅读全文
posted @ 2024-07-27 19:08 _Sylvan 阅读(45) 评论(0) 推荐(0)
摘要: Java 的并发集合容器提供了在多线程环境中高效访问和操作的数据结构。这些容器通过内部的同步机制实现了线程安全,使得开发者无需显式同步代码就能在并发环境下安全使用,比如说:ConcurrentHashMap、阻塞队列和 CopyOnWrite 容器等。 java.util 包下提供了一些容器类(集合 阅读全文
posted @ 2024-07-27 16:34 _Sylvan 阅读(37) 评论(0) 推荐(0)
摘要: LockSupprot 用来阻塞和唤醒线程,底层实现依赖于 Unsafe 类(后面会细讲)。 该类包含一组用于阻塞和唤醒线程的静态方法,这些方法主要是围绕 park 和 unpark 展开。 public class Main { public static void main(String[] a 阅读全文
posted @ 2024-07-27 15:10 _Sylvan 阅读(45) 评论(0) 推荐(0)
摘要: ThreadLocal 是 Java 中提供的一种用于实现线程局部变量的工具类。它允许每个线程都拥有自己的独立副本,从而实现线程隔离,用于解决多线程中共享对象的线程安全问题。 通常,我们会使用 synchronzed 关键字 或者 lock 来控制线程对临界区资源的同步顺序,但这种加锁的方式会让未获 阅读全文
posted @ 2024-07-27 15:09 _Sylvan 阅读(41) 评论(0) 推荐(0)
摘要: 定时任务 ScheduledThreadPoolExecutor 类有两个用途:指定时间延迟后执行任务;周期性重复执行任务。 JDK 1.5 之前,主要使用Timer类来完成定时任务,但是Timer有以下缺陷: Timer 是单线程模式; 如果在执行任务期间某个 TimerTask 耗时较久,就会影 阅读全文
posted @ 2024-07-27 13:02 _Sylvan 阅读(28) 评论(0) 推荐(0)
摘要: 并发编程领域的任务可以分为三种:简单并行任务、聚合任务和批量并行任务,见下图。 这些模型之外,还有一种任务模型被称为“分治”。分治是一种解决复杂问题的思维方法和模式;具体而言,它将一个复杂的问题分解成多个相似的子问题,然后再将这些子问题进一步分解成更小的子问题,直到每个子问题变得足够简单从而可以直接 阅读全文
posted @ 2024-07-27 12:28 _Sylvan 阅读(99) 评论(0) 推荐(0)
摘要: 类 作用 Semaphore 限制线程的数量 Exchanger 两个线程交换数据 CountDownLatch 线程等待直到计数器减为 0 时开始工作 CyclicBarrier 作用跟 CountDownLatch 类似,但是可以重复使用 Phaser 增强的 CyclicBarrier Sem 阅读全文
posted @ 2024-07-27 11:00 _Sylvan 阅读(27) 评论(0) 推荐(0)
摘要: Unsafe 基础 Unsafe 是 Java 中一个非常特殊的类,它为 Java 提供了一种底层、"不安全"的机制来直接访问和操作内存、线程和对象。正如其名字所暗示的,Unsafe 提供了许多不安全的操作,因此它的使用应该非常小心,并限于那些确实需要使用这些底层操作的场景。 Unsafe 在 st 阅读全文
posted @ 2024-07-27 02:16 _Sylvan 阅读(89) 评论(0) 推荐(0)
摘要: 原子操作的基本数据类型 基本类型的原子操作主要有这些: AtomicBoolean:以原子更新的方式更新 boolean; AtomicInteger:以原子更新的方式更新 Integer; AtomicLong:以原子更新的方式更新 Long; 这几个类的用法基本一致,这里以 AtomicInte 阅读全文
posted @ 2024-07-26 21:47 _Sylvan 阅读(111) 评论(0) 推荐(0)
摘要: BlockingQueue 是 Java 中的一个接口,它代表了一个线程安全的队列,不仅可以由多个线程并发访问,还添加了等待/通知机制,以便在队列为空时阻塞获取元素的线程,直到队列变得可用,或者在队列满时阻塞插入元素的线程,直到队列变得可用。 最常见的"生产者-消费者"问题中,队列通常被视作线程间的 阅读全文
posted @ 2024-07-26 21:31 _Sylvan 阅读(50) 评论(0) 推荐(0)
摘要: 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 线 阅读全文
posted @ 2024-07-26 15:38 _Sylvan 阅读(27) 评论(0) 推荐(0)
摘要: Condition 接口一共提供了以下 7 个方法: await():线程等待直到被通知或者中断。类似于 Object.wait()。 awaitUninterruptibly():线程等待直到被通知,即使在等待时被中断也不会返回。没有与之对应的 Object 方法。 await(long time 阅读全文
posted @ 2024-07-23 16:32 _Sylvan 阅读(60) 评论(0) 推荐(0)
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 33 下一页