
多线程
文章平均质量分 93
JackieZhengChina
70'码农,优快云博客专家,信息系统项目管理师,工商管理硕士,CZB政采评审专家,中国采购与招标专家库专家,自驾爱好者,近20年教育类产品研发及管理经历,曾任教育科技公司联合创始人兼产品VP、科技公司产研VP。
职业标签:产品、项目、技术、运营、管理、战略。
展开
-
[转]字节二面:如何设计一个支撑数亿用户的系统?
要设计出一套能支撑几十亿人的系统是很困难的。对于软件架构师来说,这一直是一项很大的挑战,但是,从现在开始,看完我的文章,你就会觉得容易很多了。下面是我在本文中提到的几个话题:从最简单的开始:万事合一。可扩展性的艺术:纵向扩展,横向扩展。扩展关系型数据库:主 - 从复制、主 - 主复制、联合、分片、非规范化和 SQL 调优。使用哪种数据库:NoSQL 还是 SQL?先进概念:缓存、CDN、geoDNS 等。在这篇文章里,我不打算谈论诸如容错、可靠性、高可用性等高性能计算的通用术语。转载 2024-04-02 10:33:35 · 44 阅读 · 0 评论 -
初级必备:单例模式的7个问题
单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例4、隐藏所有的构造方法**目的**保证一个类仅有一个实例,并提供一个访问它的全局访问点。...转载 2022-08-01 09:16:51 · 660 阅读 · 1 评论 -
深入解析volatile关键字
volatile可以使得在多处理器环境下保证了共享变量的可见性,那么到底什么是可见性? 一般在单线程的环境下,如果向一个变量先写入一个值,然后在没有写干涉的情况下读取这个变量的值,那么这个时候读取到的这个变量的值应该是之前写入的那个值。 这本来是一件很正常的事件,但是在多线程环境下,读和写发生在不同的线程中的时候,可能会出现以下的情况:读线程不能及时的读取到其他线程写入的最新的值。这就是所谓的可见性,为了实现跨线程写入的内存可见性,必须要使用一些机制来实现,而volatile就是这样的一种机制。......转载 2022-08-01 08:42:10 · 195 阅读 · 0 评论 -
并发编程10大坑,你踩过几个?
对于从事后端开发的同学来说,并发编程肯定再熟悉不过了。说实话,在java中并发编程是一大难点,至少我是这么认为的。不光理解起来比较费劲,使用起来更容易踩坑。不信,让继续往下面看。今天重点跟大家一起聊聊并发编程的10个坑,希望对你有帮助。.........转载 2022-08-01 07:36:44 · 253 阅读 · 1 评论 -
Thread、Runnable、Callable、Future ... 的关系?
Thread、Runnable、Callable、Future、FutureTask,你能详细讲出他们的内部关系么?这也是面试经常问到的问题。1. Thread 和 Runnable1.1 Thread我们先看一下 Thread 最简单的使用姿势:publicclassMyThreadextendsThread{publicMyThread(Stringname){super(name);}@Overridepubli...转载 2022-07-29 10:13:31 · 219 阅读 · 0 评论 -
Semaphore详解
判断是否满足获取锁条件,关键方法.若获取锁成功,则也会修改state.若获取锁失败,关键方法阻塞的获取锁.添加到双向链表若是头节点后继,则尝试获取锁,否者则判断进入睡眠等待唤醒,唤醒后继续执行3.2若不进入睡眠,则直接运行到3.2步释放N个许可,因为存在并发释放,需要CAS确保设置更新后的值.唤醒双向链表中有效的等待节点.(可能存在并发问题,引入PROPAGATE状态)被唤醒的节点调用获取锁的流程....转载 2022-07-24 11:08:31 · 26006 阅读 · 1 评论 -
有关并行的两个重要定律
加速比定义加速比=优化前系统耗时/优化后系统耗时所谓加速比就是优化前的耗时与优化后耗时的比值。加速比越高,表明优化效果越明显。图1-1为Amdahl公式推导过程,其中n表示处理器个数,T表示时间,T1表示优化前耗时(也就是只有1个处理器时的耗时),Tn表示使用n个处理器优化后的耗时。F是程序中只能串行执行的比例。图1-1根据这个公式,如果cpu处理器数量趋于无穷,那么加速比与系统的串行化比例成反比,如果系统中必须有50%的代码串行执行,那么系统的最大加速比为2。假设有一个程序分为以下步骤执。...转载 2022-07-24 09:16:59 · 432 阅读 · 0 评论 -
IO 和NIO的区别
NIO是为弥补传统IO的不足而诞生的,但是NIO也有缺陷,应为NIO是面向缓冲区的操作,每一次的数据处理都是对缓冲区进行的,那就必须注意在数据处理之前必须要判断缓冲区的数据是否完整或者已经读取完毕。这就好像是在河流上建立水坝,面向流的数据读写只提供了一个数据流切面,而面向缓冲区的IO则使我们能够看到所有的水(数据的上下文),也就是说在缓冲区中获取某项数据的前一项数据或者是后一项数据十分方便。IO和NIO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO快不少。......转载 2022-07-21 14:49:06 · 614 阅读 · 0 评论 -
JMX 使用指南一 Java Management Extensions
JMX,全称JavaManagementExtensions,是在J2SE5.0版本中引入的一个功能。提供了一种在运行时动态管理资源的框架,主要用于企业应用程序中实现可配置或动态获取应用程序的状态。JMX提供了一种简单、标准的监控和管理资源的方式,对于如何定义一个资源给出了明确的模式。...转载 2022-07-19 19:28:23 · 609 阅读 · 0 评论 -
Java并发编程:Executor、Executors、ExecutorService
在Java5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java5中引入的,其内部使用了线程池机制,它在java.util.cocurrent包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点。...转载 2022-07-19 15:13:50 · 651 阅读 · 0 评论 -
JAVA Future类详解
这个接口都实现类是FutureTask,一个可取消的异步计算,这个类提供了Future的基本实现,后面我们的demo也是用这个类实现,它实现了启动和取消一个计算,查询这个计算是否已完成,恢复计算结果。举个例子比如去吃早点时,点了包子和凉菜,包子需要等3分钟,凉菜只需1分钟,如果是串行的一个执行,在吃上早点的时候需要等待4分钟,但是因为你在等包子的时候,可以同时准备凉菜,所以在准备凉菜的过程中,可以同时准备包子,这样只需要等待3分钟。基于任务的抽象类,可以通过ForkJoinPool来执行。...转载 2022-07-19 14:45:49 · 503 阅读 · 0 评论 -
Java线程通信的几种方式
有两个线程,A 线程向一个集合里面依次添加元素“abc”字符串,一共添加十次,当添加到第五次的时候,希望 B 线程能够收到 A 线程的通知,然后 B 线程执行相关的业务操作。线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。基于 volatile 关键字来实现线程间相互通信是使用共享内存的思想。大致意思就是多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。这也是最简单的一种实现方式Object 类提供了线程间通信的方法:wait()、no转载 2022-06-29 18:48:33 · 4634 阅读 · 0 评论 -
基于redis实现的扣减库存
理论上即使是这样由于MySQL事务的特性,这种方法只能降低超卖的数量,但是不可能完全避免超扣。因为数据库默认隔离级别是repeatable read,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存为4,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以B修改库存为4,这样就出现了超扣问题。所以我们扣库存的时候需要将事务隔离级别设置成read commit才可以。(我自己测试没有出现这种情况)MySQL自身对于高并发的处理性能就会转载 2022-06-28 21:37:08 · 1103 阅读 · 0 评论 -
JAVA高并发多线程必须懂的50个问题
下面是Java线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。欲了解更多详细信息请点击这里。2) 线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的原创 2022-06-28 20:32:05 · 406 阅读 · 0 评论