Java并发编程
文章平均质量分 90
主要分享Java并发编程的相关知识
NingKangMing
这个作者很懒,什么都没留下…
展开
-
Java并发编程之如何正确的停止线程
本文主要介绍在Java中如何通过通知与协作来正确的停止线程,错误的停止线程方法会导致数据损坏、数据不一致等严重情况。原创 2024-07-16 10:05:38 · 992 阅读 · 0 评论 -
Java并发编程之多线程实现方法
本文探讨Java实现多线程的各种方式及其原理源码探索。原创 2024-07-13 09:59:35 · 348 阅读 · 0 评论 -
一文读懂Java并发编程基础知识
并发是指在某个时间段内,多任务交替处理的能力。比如说,你有一台单核心CPU电脑,注意必须是以单核心来理解下面的例子才是正确的。你可以利用电脑边听音乐,边写PPT,还能随时斗上一盘地主。这些事情表面上看起来就是同一时刻在执行多个任务。在同一应用上又可以做多个事情,比如你玩斗地主,程序在播音乐,在处理各个玩家的出牌,还要处理玩家有聊天界面上相互骂娘的任务。在单核CPU电脑上能“同时”处理多个事情,这个叫并发。假设你是多核心电脑,你在电脑时同时进行多个任务,此时叫并行。原创 2024-07-16 10:07:19 · 868 阅读 · 0 评论 -
一文读懂Java多线程优点与代价
本文主要介绍多线程的优点与缺点原创 2024-07-13 11:14:08 · 577 阅读 · 0 评论 -
一文读懂Java线程安全
Java Concurrency In Practice》对线程安全的定义如下:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不作其他的协调,这个类的行为仍是正确的,那么称这个类是线程安全的。简单理解就是,多线程环境下访问这个对象,我们不必考虑对象里面方法间协调的问题,对象的行为依然正确。通常这些类自己已经做好了同步等工作,比如,并发访问对象的共享变量时加上锁等同步机制。原创 2024-07-13 11:16:24 · 872 阅读 · 0 评论 -
一文读懂Java多线程并发之内存模型
Java内存模型(Java Memory Model)描述了Java编程语言中的线程如何与内存进行交互,是和多线程相关的一组规范,需要各个 JVM 的实现来遵守 JMM 规范,以便于开发者可以利用这些规范,更方便地开发多线程程序。有了这些规范,即便同一个程序在不同操作系统的虚拟机上运行,得到的程序结果也是一致的。如果没有这些规范,不同操作系统的虚拟机对相同关键字的解释不一致,这是不可接受的。JMM旨在解决 CPU 多级缓存、处理器优化、指令重排等导致的结果不可预期的问题。原创 2024-07-13 11:16:43 · 642 阅读 · 0 评论 -
一文读懂Java线程状态转换
线程可以拥有自己的操作栈、程序计数器、局部变量表等资源,它与同一进程内的其他线程共享该进程的所有资源。Java的线程有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态原创 2024-06-19 11:20:38 · 999 阅读 · 0 评论 -
一文读懂Java线程池之自定义线程池、设置合适的线程数量、线程池阻塞队列、线程拒绝策略
在上篇我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小、当线程池没有能力处理任务了该如何使用拒绝策略等内容。原创 2024-07-12 11:33:09 · 1375 阅读 · 0 评论 -
一文读懂Java线程池之线程池优点、使用方法、参数含义及线程池运转机制
如果满了,则把任务放到阻塞队列中,等待有空闲的核心线程来执行任务。注意到构建线程池的参数中有keepAliveTime+时间单位这两个参数,这两个参数正是用于回收非核心线程用的,当非核心线程没任务了,空闲时间达到keepAliveTime配置的值后将会被线程池销毁以回收一些系统资源。线程池就是为了解决上述问题出现的,解决问题的思路很清晰,就是创建好一定数量的线程,有任务来了就用这些线程来执行任务,任务过多把池里面的线程都占用了就放队列排队等候其他任务执行,一旦有空闲线程就可以从队列里面取出任务并执行。原创 2024-07-17 09:23:36 · 1018 阅读 · 0 评论 -
一文读懂Java线程池之线程复用原理
在Java中,我们正常创建线程执行任务,一般都是一条线程绑定一个Runnable执行任务。而Runnable实际只是一个普通接口,真正要执行,则还是利用了Thread类的run方法。这个rurn方法由native本地方法start0进行调用。我们看Thread类的run方法实现/*** */@Overrideif (target!= null) {很明显,Thread类的run方法就是使用构造Thread类传入来的Runnable对象,执行Runnable的run方法。原创 2024-07-15 10:57:53 · 1141 阅读 · 0 评论