- 示例程序:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果是什么呢?一定会是200吗?加了同步锁之后,count自增的操作变成了原子性操作,所以最终的输出一定是count=200,代码实现了线程安全。为什么这么说呢?关键在于性能问题。Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状... 示例程序:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果是什么呢?一定会是200吗?加了同步锁之后,count自增的操作变成了原子性操作,所以最终的输出一定是count=200,代码实现了线程安全。为什么这么说呢?关键在于性能问题。Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状...
- Java内存模型简称JMM(Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在各种平台下都能达到一致的内存访问效果。Java内存模型长成什么样子呢?就是下图的样子:这里需要解释几个概念:1.主内存(Main Memory)主内存可以简单理解为计算机当中的内存,但又不完全等同。主内存被所有的线程所共享,对于一个... Java内存模型简称JMM(Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在各种平台下都能达到一致的内存访问效果。Java内存模型长成什么样子呢?就是下图的样子:这里需要解释几个概念:1.主内存(Main Memory)主内存可以简单理解为计算机当中的内存,但又不完全等同。主内存被所有的线程所共享,对于一个...
- ⾯试中经常会问到,创建⼀个线程池需要哪些参数、线程池的工作原理,却很少会问到线程池如何安全关闭的。也正是因为⼤家不是很关注这块,即便是⼯作三四年的⼈,也会有因为线程池关闭不合理,导致应用⽆法正常stop的情况,还有出现⼀些报错的问题。本篇就以ThreadPoolExecutor为例例,来介绍下如何优雅的关闭线程池。线程中断在介绍线程池关闭之前,先介绍下Thread的interrupt。在程序... ⾯试中经常会问到,创建⼀个线程池需要哪些参数、线程池的工作原理,却很少会问到线程池如何安全关闭的。也正是因为⼤家不是很关注这块,即便是⼯作三四年的⼈,也会有因为线程池关闭不合理,导致应用⽆法正常stop的情况,还有出现⼀些报错的问题。本篇就以ThreadPoolExecutor为例例,来介绍下如何优雅的关闭线程池。线程中断在介绍线程池关闭之前,先介绍下Thread的interrupt。在程序...
- 原文地址:http://suo.im/4uH1hyDebug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容:一、Debug开篇二、基本用法&快捷键三、变量查看四... 原文地址:http://suo.im/4uH1hyDebug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容:一、Debug开篇二、基本用法&快捷键三、变量查看四...
- 前言大一的时候,我仅仅接触过 C 语言,对 C 语言的掌握程度仅仅是可以完成老师布置的课后习题。那时候我的主要的精力都放在了参加各种课外活动,跟着一个很不错的社团尝试了很多我之前从未尝试过的事情:露营、户外烧烤、公交车演讲、环跑古城墙、徒步旅行、异地求生、圣诞节卖苹果等等。到了大二我才接触到 HTML、CSS、JS、Java、Linux、PHP 这些名词。最开始接触 Java 的时候因为工作... 前言大一的时候,我仅仅接触过 C 语言,对 C 语言的掌握程度仅仅是可以完成老师布置的课后习题。那时候我的主要的精力都放在了参加各种课外活动,跟着一个很不错的社团尝试了很多我之前从未尝试过的事情:露营、户外烧烤、公交车演讲、环跑古城墙、徒步旅行、异地求生、圣诞节卖苹果等等。到了大二我才接触到 HTML、CSS、JS、Java、Linux、PHP 这些名词。最开始接触 Java 的时候因为工作...
- 在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊、售票系统啊等。为了避免这些问题的出现,我们可以使用 synchronized 关键字来解决,下面针对 synchronized 常见的用法做一个总结。首先写一个存在并发问题的程序,如下:public class TraditionalThreadSynchronized { public static void mai... 在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊、售票系统啊等。为了避免这些问题的出现,我们可以使用 synchronized 关键字来解决,下面针对 synchronized 常见的用法做一个总结。首先写一个存在并发问题的程序,如下:public class TraditionalThreadSynchronized { public static void mai...
- 传统的线程技术中有两种创建线程的方式:一是继承 Thread 类,并重写 run() 方法;二是实现 Runnable 接口,覆盖接口中的 run() 方法,并把 Runnable 接口的实现扔给 Thread。这两种方式大部分人可能都知道,但是为什么这样玩就可以呢?下面我们来详细分析一下这两种方法的来龙去脉。1. 揭秘Thread中run()上面我们看到这两种方式都跟 run() 方法有关... 传统的线程技术中有两种创建线程的方式:一是继承 Thread 类,并重写 run() 方法;二是实现 Runnable 接口,覆盖接口中的 run() 方法,并把 Runnable 接口的实现扔给 Thread。这两种方式大部分人可能都知道,但是为什么这样玩就可以呢?下面我们来详细分析一下这两种方法的来龙去脉。1. 揭秘Thread中run()上面我们看到这两种方式都跟 run() 方法有关...
- 如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到 Exchanger 这个类,Exchanger 为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange() 方法并给出对象时,才能接受其他线程返回时给出的对象。每次只能两个线程交换数据,如果有多个线程,也只有两个能交换数据。下面看个通俗的例子:一手交钱... 如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到 Exchanger 这个类,Exchanger 为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange() 方法并给出对象时,才能接受其他线程返回时给出的对象。每次只能两个线程交换数据,如果有多个线程,也只有两个能交换数据。下面看个通俗的例子:一手交钱...
- Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)线程数目,我们可以自己设定最大访问量。它有两个很常用的方法是 acquire() 和 release(),分别是获得许可和释放许可。官方JDK上面对 Semaphore 的解释是这样子的:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 relea... Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)线程数目,我们可以自己设定最大访问量。它有两个很常用的方法是 acquire() 和 release(),分别是获得许可和释放许可。官方JDK上面对 Semaphore 的解释是这样子的:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 relea...
- 今天周六,该休息休息,该浪浪,武哥还是来聊聊技术吧,如题。Condition 将 Object 监听器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用, Condition 替代了 Object 监... 今天周六,该休息休息,该浪浪,武哥还是来聊聊技术吧,如题。Condition 将 Object 监听器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用, Condition 替代了 Object 监...
- 线程锁好比传统线程模型中的 synchronized 技术,但是比 synchronized 方式更加面向对象,与生活中的锁类似,锁本身也应该是个对象。两个线程执行的代码片段如果要实现同步互斥的效果,它们必须用用一个锁对象。锁是上在代表要做操的资源的类的内部方法中,而不是线程代码中。这篇文章主要总结一下线程锁技术中 Lock锁、ReadWriteLock 锁的使用。1. Lock的简单使用有... 线程锁好比传统线程模型中的 synchronized 技术,但是比 synchronized 方式更加面向对象,与生活中的锁类似,锁本身也应该是个对象。两个线程执行的代码片段如果要实现同步互斥的效果,它们必须用用一个锁对象。锁是上在代表要做操的资源的类的内部方法中,而不是线程代码中。这篇文章主要总结一下线程锁技术中 Lock锁、ReadWriteLock 锁的使用。1. Lock的简单使用有...
- Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。而 Callable 可以返回一个结果,这个返回值可以被 Future 拿到,也就是说,Future 可以拿到异步执行任务的返回值,下面来看一个简单的例子:public class CallableAndFuture { ... Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。而 Callable 可以返回一个结果,这个返回值可以被 Future 拿到,也就是说,Future 可以拿到异步执行任务的返回值,下面来看一个简单的例子:public class CallableAndFuture { ...
- 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. 每个线程执行的任务相同这是最简...
上滑加载中
推荐直播
-
华为云码道-玩转OpenClaw,在线养虾2026/03/11 周三 19:00-21:00
刘昱,华为云高级工程师/谈心,华为云技术专家/李海仑,上海圭卓智能科技有限公司CEO
OpenClaw 火爆开发者圈,华为云码道最新推出 Skill ——开发者只需输入一句口令,即可部署一个功能完整的「小龙虾」智能体。直播带你玩转华为云码道,玩转OpenClaw
回顾中 -
华为云码道-AI时代应用开发利器2026/03/18 周三 19:00-20:00
童得力,华为云开发者生态运营总监/姚圣伟,华为云HCDE开发者专家
本次直播由华为专家带你实战应用开发,看华为云码道(CodeArts)代码智能体如何在AI时代让你的创意应用快速落地。更有华为云HCDE开发者专家带你用码道玩转JiuwenClaw,让小艺成为你的AI助理。
回顾中 -
Skill 构建 × 智能创作:基于华为云码道的 AI 内容生产提效方案2026/03/25 周三 19:00-20:00
余伟,华为云软件研发工程师/万邵业(万少),华为云HCDE开发者专家
本次直播带来两大实战:华为云码道 Skill-Creator 手把手搭建专属知识库 Skill;如何用码道提效 OpenClaw 小说文本,打造从大纲到成稿的 AI 原创小说全链路。技术干货 + OPC创作思路,一次讲透!
回顾中
热门标签