- 1. 线程池的概念在 java5 之后,就有了线程池的功能了,在介绍线程池之前,先来简单看一下线程池的概念。假设我开了家咨询公司,那么每天会有很多人过来咨询问题,如果我一个个接待的话,必然有很多人要排队,这样效率就很差,我想解决这个问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,再来一个,我再分配个客服去接待……如果第一个客服接待完了,我就让她接待下一个咨询者,这样我雇的这... 1. 线程池的概念在 java5 之后,就有了线程池的功能了,在介绍线程池之前,先来简单看一下线程池的概念。假设我开了家咨询公司,那么每天会有很多人过来咨询问题,如果我一个个接待的话,必然有很多人要排队,这样效率就很差,我想解决这个问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,再来一个,我再分配个客服去接待……如果第一个客服接待完了,我就让她接待下一个咨询者,这样我雇的这...
- 在 java5 以后,我们接触到了线程原子性操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,本文总结一下 Atomic 系列的类的使用方法,其中包含:1. 基本类型的使用首先看一下 AtomicInteger 的使用,AtomicInteger 主要是针对整数的修改的,看一下示例代码:public class AtomicIntegerD... 在 java5 以后,我们接触到了线程原子性操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,本文总结一下 Atomic 系列的类的使用方法,其中包含:1. 基本类型的使用首先看一下 AtomicInteger 的使用,AtomicInteger 主要是针对整数的修改的,看一下示例代码:public class AtomicIntegerD...
- 我们先看一个多线程间共享数据的问题:设计四个线程,其中两个线程每次对 data 增加 1,另外两个线程每次对 data 减少 1。从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作一个 data。我们先把上面这个问题放在一边,慢慢分析多个线程之间共享数据的一些情况,从最简单开始,分类分析完了后,到时候也好解决上面这个问题了。1. 每个线程执行的任务相同这是最简... 我们先看一个多线程间共享数据的问题:设计四个线程,其中两个线程每次对 data 增加 1,另外两个线程每次对 data 减少 1。从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作一个 data。我们先把上面这个问题放在一边,慢慢分析多个线程之间共享数据的一些情况,从最简单开始,分类分析完了后,到时候也好解决上面这个问题了。1. 每个线程执行的任务相同这是最简...
- 在上一篇文章中我们总结了一下,线程范围内的数据共享问题,即定义一个 Map,将当前线程名称和线程中的数据以键值对的形式存到 Map 中,然后在当前线程中使用数据的时候就可以根据当前线程名称从 Map 中拿到当前线程中的数据,这样就可以做到不同线程之间数据互不干扰。其实 ThreadLocal 类就是给我们提供了这个解决方法,所以我们完全可以用 ThreadLocal 来完成线程范围内数据的共... 在上一篇文章中我们总结了一下,线程范围内的数据共享问题,即定义一个 Map,将当前线程名称和线程中的数据以键值对的形式存到 Map 中,然后在当前线程中使用数据的时候就可以根据当前线程名称从 Map 中拿到当前线程中的数据,这样就可以做到不同线程之间数据互不干扰。其实 ThreadLocal 类就是给我们提供了这个解决方法,所以我们完全可以用 ThreadLocal 来完成线程范围内数据的共...
- 假设现在有个公共的变量 data,有不同的线程都可以去操作它,如果在不同的线程对 data 操作完成后再去取这个 data,那么肯定会出现线程间的数据混乱问题,因为 A 线程在取 data 数据前可能 B 线程又对其进行了修改,下面写个程序来说明一下该问题:public class ThreadScopeShareData { private static int data = 0;/... 假设现在有个公共的变量 data,有不同的线程都可以去操作它,如果在不同的线程对 data 操作完成后再去取这个 data,那么肯定会出现线程间的数据混乱问题,因为 A 线程在取 data 数据前可能 B 线程又对其进行了修改,下面写个程序来说明一下该问题:public class ThreadScopeShareData { private static int data = 0;/...
- 我们先来看一个问题:有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首先肯定要有两个线程,然后每个线程中肯定有个50次的循环,因为每个线程都要往返执行任务50次,主线程的任务是执行5次,子线程的任务是执行10次。线程间通信技术主要用到 wait() 方法和 no... 我们先来看一个问题:有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首先肯定要有两个线程,然后每个线程中肯定有个50次的循环,因为每个线程都要往返执行任务50次,主线程的任务是执行5次,子线程的任务是执行10次。线程间通信技术主要用到 wait() 方法和 no...
- 我们知道,使用 synchronized 关键字可以有效的解决线程同步问题,但是如果不恰当的使用 synchronized 关键字的话也会出问题,即我们所说的死锁。死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。我们先写一个死锁的例子,再来分析一下死锁产生的原因:public class DeadLock {... 我们知道,使用 synchronized 关键字可以有效的解决线程同步问题,但是如果不恰当的使用 synchronized 关键字的话也会出问题,即我们所说的死锁。死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。我们先写一个死锁的例子,再来分析一下死锁产生的原因:public class DeadLock {...
- 传统线程技术中有个定时器,定时器的类是 Timer,我们使用定时器的目的就是给它安排任务,让它在指定的时间完成任务。所以先来看一下 Timer 类中的方法(主要看常用的 TimerTask() 方法):返回值方法名方法描述voidschedule(TimerTasktask,longdelay)安排在指定延迟后执行指定的任务。voidschedule(TimerTasktask,longde... 传统线程技术中有个定时器,定时器的类是 Timer,我们使用定时器的目的就是给它安排任务,让它在指定的时间完成任务。所以先来看一下 Timer 类中的方法(主要看常用的 TimerTask() 方法):返回值方法名方法描述voidschedule(TimerTasktask,longdelay)安排在指定延迟后执行指定的任务。voidschedule(TimerTasktask,longde...
- 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了。作为在生产环境中广泛应用的产品,Docker 有着非常成熟的社区以及大量的使用者,代码库中的内容也变得非常庞大。同样,由于项目的发展、功能的拆分以及各种奇怪的改名 PR,让我们再次理解 Docker 的的整体架构变得更加困难。虽然 Docke... 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了。作为在生产环境中广泛应用的产品,Docker 有着非常成熟的社区以及大量的使用者,代码库中的内容也变得非常庞大。同样,由于项目的发展、功能的拆分以及各种奇怪的改名 PR,让我们再次理解 Docker 的的整体架构变得更加困难。虽然 Docke...
- arthas是有阿里巴巴开源的Java故障诊断的工具,它采用shell模式的交互,提供丰富的自动补全功能。 arthas是有阿里巴巴开源的Java故障诊断的工具,它采用shell模式的交互,提供丰富的自动补全功能。
- Android内存管理包含两部分,一部分是Framework对内存的管理,一部分是Linux内核对内存管理,这两部分共同决定应用程序的生命周期 Android内存管理包含两部分,一部分是Framework对内存的管理,一部分是Linux内核对内存管理,这两部分共同决定应用程序的生命周期
- 新乡市先臣振动机械有限公司是一家生产各种不锈钢振动筛的厂家,产品含有摇摆筛、超声波振动筛、回旋筛、旋振筛、高频筛、强制筛等,想要了解相关产品信息可以关注我们的官网或者打电话,我们竭诚为您服务! 新乡市先臣振动机械有限公司是一家生产各种不锈钢振动筛的厂家,产品含有摇摆筛、超声波振动筛、回旋筛、旋振筛、高频筛、强制筛等,想要了解相关产品信息可以关注我们的官网或者打电话,我们竭诚为您服务!
- 从 Memcached1.5 开始,实现了一个改良的 LRU 算法,也叫做分段 LRU(Segmented LRU)算法,新算法主要是为了更好的利用内容,并提升性能。包括了二个重要的线程,本文先讲解 maintainer 线程,后一篇讲解 crawler 线程。每个 Slab-class 有一个 LRU,每个 LRU 又由四个子 LRU 组成,每个子 LRU 维护独立的锁(mutex loc... 从 Memcached1.5 开始,实现了一个改良的 LRU 算法,也叫做分段 LRU(Segmented LRU)算法,新算法主要是为了更好的利用内容,并提升性能。包括了二个重要的线程,本文先讲解 maintainer 线程,后一篇讲解 crawler 线程。每个 Slab-class 有一个 LRU,每个 LRU 又由四个子 LRU 组成,每个子 LRU 维护独立的锁(mutex loc...
- 31.1 JAVA程序运行的内存分析栈: 1. 每个线程私有,不能实现线程间的共享! 2. 局部变量放置于栈中。 3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!堆: 1. 放置new出来的对象! 2. 堆是一个不连续的内存空间,分配灵活,速度慢!方法区(也是堆): 1. 被所有线程共享! 2. 用... 31.1 JAVA程序运行的内存分析栈: 1. 每个线程私有,不能实现线程间的共享! 2. 局部变量放置于栈中。 3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!堆: 1. 放置new出来的对象! 2. 堆是一个不连续的内存空间,分配灵活,速度慢!方法区(也是堆): 1. 被所有线程共享! 2. 用...
- 文件子系统中的高层内核算法引用管理高速缓冲的算法。当它们试图检索一个块时,由高层算法决定它们想要存取的逻辑设备号和块号。举例来说,正如在第4章将要看到的那样,如果一个进程想要从一个文件中读数据,则内核需判定哪一个文件系统包含该文件,以及该文件系统中的哪一块包含该数据。当要从一个特定的磁盘块上读数据时,内核检查是否该块在缓冲区池中。如果不在,则分配给它一个空闲缓冲区。当要把数据写到一个特定磁盘... 文件子系统中的高层内核算法引用管理高速缓冲的算法。当它们试图检索一个块时,由高层算法决定它们想要存取的逻辑设备号和块号。举例来说,正如在第4章将要看到的那样,如果一个进程想要从一个文件中读数据,则内核需判定哪一个文件系统包含该文件,以及该文件系统中的哪一块包含该数据。当要从一个特定的磁盘块上读数据时,内核检查是否该块在缓冲区池中。如果不在,则分配给它一个空闲缓冲区。当要把数据写到一个特定磁盘...
上滑加载中
推荐直播
-
大模型Prompt工程深度实践
2025/02/24 周一 16:00-17:30
盖伦 华为云学堂技术讲师
如何让大模型精准理解开发需求并生成可靠输出?本期直播聚焦大模型Prompt工程核心技术:理解大模型推理基础原理,关键采样参数定义,提示词撰写关键策略及Prompt工程技巧分享。
回顾中 -
华为云 x DeepSeek:AI驱动云上应用创新
2025/02/26 周三 16:00-18:00
华为云 AI专家大咖团
在 AI 技术飞速发展之际,DeepSeek 备受关注。它凭借哪些技术与理念脱颖而出?华为云与 DeepSeek 合作,将如何重塑产品与应用模式,助力企业数字化转型?在华为开发者空间,怎样高效部署 DeepSeek,搭建专属服务器?基于华为云平台,又该如何挖掘 DeepSeek 潜力,实现智能化升级?本期直播围绕DeepSeek在云上的应用案例,与DTSE布道师们一起探讨如何利用AI 驱动云上应用创新。
去报名
热门标签