多线程
文章平均质量分 79
兜兜风d'
这个作者很懒,什么都没留下…
展开
-
用信号量解决哲学家进餐问题
哲学家进餐问题是一个经典的并发编程问题,它涉及到一群哲学家坐在圆桌周围进餐。每个哲学家都必须完成两个任务:思考和就餐。他们之间共享一些餐具,如叉子,但每个哲学家在就餐时需要同时拿到左手和右手的叉子。如果某个哲学家左右两边的叉子都被其他哲学家拿走了,那么他就无法进餐,就会陷入饥饿状态,最终可能导致死锁。原创 2024-04-05 09:00:00 · 219 阅读 · 0 评论 -
Java中的信号量Semaphore
信号量Semaphore是一种用于控制多个线程访问共享资源的同步工具。它通过维护一个计数器来控制对共享资源的访问,当资源被一个线程占用时,计数器减一;当资源被释放时,计数器加一。当计数器为0时,表示资源已被全部占用,新的线程需要等待其他线程释放资源。原创 2024-04-01 22:56:38 · 483 阅读 · 0 评论 -
详解ExecutorService 和 Executors
代码示例:代码示例:ExecutorService 表⽰⼀个线程池实例.Executors 是⼀个⼯⼚类, 能够创建出⼏种不同⻛格的线程池.ExecutorService 的 submit ⽅法能够向线程池中提交若⼲个任务.Executors 创建线程池的⼏种⽅式newFixedThreadPool: 创建固定线程数的线程池newCachedThreadPool: 创建线程数⽬动态增⻓的线程池.newSingleThreadExecutor: 创建只包含单个线程的线程池.原创 2024-04-01 22:52:25 · 507 阅读 · 0 评论 -
CAS 的 ABA 问题
线程 t1 的 CAS 是期望 num 不变就修改. 但是 num 的值已经被 t2 给改了. 只不过⼜改成 A 了. 这个时候 t1 究竟是否要更新 num 的值为 Z 呢?但是, 在 t1 执⾏这两个操作之间, t2 线程可能把 num 的值从 A 改成了 B, ⼜从 B 改成了 A。轮到线程2 执⾏了, 发现当前存款为 100, 和之前读到的 100 相同, 再次执⾏扣款操作。轮到线程2 执⾏了, 发现当前存款为 50, 和之前读到的 100 不相同, 执⾏失败.这个时候, 扣款操作被执⾏了两次!原创 2024-03-31 22:56:03 · 492 阅读 · 0 评论 -
详解CAS(Compare and swap)
一、什么是 CAS一、什么是 CASCAS: 全称Compare and swap,字⾯意思:”⽐较并交换“,⼀个 CAS 涉及到以下操作:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较 A 与 V 是否相等。(⽐较)如果⽐较相等,将 B 写⼊ V。(交换)返回操作是否成功。CAS 伪代码下⾯写的代码不是原⼦的, 真实的 CAS 是⼀个原⼦的硬件指令完成的. 这个伪代码只是辅助理解 CAS的⼯作流程.两种典型的不是 "原⼦性" 的代码。原创 2024-03-31 22:43:44 · 622 阅读 · 0 评论 -
Java中常见的锁策略
乐观锁 vs 悲观锁悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别⼈会修改,所以每次在拿数据的时候都会上锁,这样别⼈想拿这个数据就会阻塞直到它拿到锁。乐观锁:假设数据⼀般情况下不会产⽣并发冲突,所以在数据进⾏提交更新的时候,才会正式对数据是否产⽣并发冲突进⾏检测,如果发现并发冲突了,则让返回⽤⼾错误的信息,让⽤⼾决定如何去做。举个栗⼦: 同学 A 和 同学 B 想请教⽼师⼀个问题.原创 2024-03-31 22:29:58 · 689 阅读 · 0 评论 -
Java 线程池
引言:在 Java 编程中,线程池是一种重要的多线程处理机制,它可以有效地管理和复用线程,提高了多线程程序的性能和可靠性。本文将详细介绍 Java 中线程池的概念、好处,并演示如何自己实现一个简单的线程池。原创 2024-03-31 16:24:17 · 399 阅读 · 0 评论 -
Java 中的单例模式
引言:在 Java 编程中,单例模式是一种常见的设计模式,它保证一个类只能创建一个实例,并提供一个全局访问点。单例模式在很多场景下都非常有用,比如线程池、日志系统、数据库连接池等。本文将详细介绍 Java 中单例模式的实现方式,并通过示例说明其在实际应用中的应用场景。原创 2024-03-31 15:33:20 · 1080 阅读 · 0 评论 -
详解Java 中的 wait 和 notify 方法
wait(): 当一个线程执行了wait()方法后,它会释放当前持有的对象锁,并进入等待状态,直到其他线程调用了相同对象上的notify()或方法将其唤醒。notify(): 用于唤醒一个正在等待的线程。调用notify()方法会随机唤醒等待队列中的一个线程,并使其从wait()方法返回。: 用于唤醒所有正在等待的线程。调用方法会唤醒等待队列中的所有线程,使它们从wait()方法返回。wait()和notify()方法是 Java 多线程编程中非常重要的工具,能够实现线程间的协作和通信。原创 2024-03-31 15:12:54 · 317 阅读 · 0 评论 -
详解 Java 中的 volatile 关键字
volatile 能保证内存可见性引言:在 Java 编程中,volatile是一个非常重要的关键字,用于修饰变量。它主要用于确保多个线程之间对共享变量的修改能够被及时地更新到主内存,并且能够保证可见性。然而,需要注意的是,volatile关键字并不具备原子性,这就意味着在某些情况下,仅仅使用volatile是不足够的。本文将深入探讨volatile关键字的使用及其特性。原创 2024-03-31 14:43:51 · 917 阅读 · 0 评论 -
synchronized 关键字 - 监视器锁 monitor lock
synchronized 的特性及使用示例原创 2024-03-31 14:24:46 · 991 阅读 · 0 评论 -
详解 Java多线程带来的的风险-线程安全
线程安全是指在多线程环境中,对共享资源的访问不会导致数据的损坏或不一致。一个线程安全的程序在多线程环境下执行时,能够确保各个线程都能正确地操作共享的数据,而不会产生意外结果。原创 2024-03-31 14:08:48 · 1234 阅读 · 0 评论 -
详解Java线程的状态
观察线程的所有状态。原创 2024-03-31 13:51:35 · 181 阅读 · 0 评论 -
Thread 类及常见方法
引言:Thread 类是 JVM ⽤来管理线程的⼀个类,换句话说,每个线程都有⼀个唯⼀的 Thread 对象与之关联。每个执⾏流,也需要有⼀个对象来描述,⽽ Thread 类的对象 就是⽤来描述⼀个线程执⾏流的,JVM 会将这些 Thread 对象组织起来,⽤于线程调度,线程管理。原创 2024-03-30 13:04:53 · 932 阅读 · 0 评论 -
认识线程(Thread)
引言:在Java编程中,线程(Thread)是一项重要的概念,它使得程序能够同时执行多个任务,提高了程序的效率和响应速度。本文将介绍Java线程的基本概念、创建方式以及多线程的优势。一、概念1、 线程是什么⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏着多份代码。2、为啥要有线程?⾸先,"并发编程" 成为 "刚需"。单核 CPU 的发展遇到了瓶颈. 要想提⾼算⼒, 就需要多核 CPU. ⽽并发编程能更充分利⽤多核 CPU资源.原创 2024-03-27 22:30:24 · 813 阅读 · 0 评论 -
Java中的Timer类以及自己实现一个MyTimer
Timer类是 Java 提供的用于执行定时任务的工具类。它允许你安排任务在未来的某个时间点执行,也可以定期执行。下面是关于Timer。原创 2024-03-23 12:42:19 · 293 阅读 · 0 评论