
多线程并发编程
文章平均质量分 88
多线程并发编程
charles·wang
欣逢盛世 当不负盛世 -- 钟南山
展开
-
java线程的并发工具类--FockJoin的用法 详解
一. Fork-join 解释说明 Fork-Join: 多线程开发可以启用多线程、线程池、还可以使用forkjoin。forkjoin 可以让我们不去了解诸如 Thread,Runnable 等相关知识,只要遵循 forkjoin 的开发模式,就可以写出很好的多线程并发程序。 在十大计算机经典算法: 快速排序、堆排序、归并排序、二分查找、线性查找、 深度优先、广度优先、Dijkstra、动态规划、朴素贝叶斯分类,有几个属于分而治之? 答:3 个分别是:快速排序、归并排序、二分查找,还有大原创 2020-06-15 00:32:27 · 956 阅读 · 0 评论 -
CountDownLatch的使用和原理分析
一. 什么是CountDownLatch CountDownLatch: 又称闭锁,CountDownLatch 这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。 CountDownLatch 是通过一个计数器来实现的,计数器的初始值为初始任务的数量。每当完成了一个任务后,计数器的值就会减 1 (CountDownLatch.countDown()方法)。当计数器值到达 0 时,它表示所有的已 经完成了任务原创 2020-06-12 01:10:52 · 348 阅读 · 0 评论 -
面试题--采用Java多线程技术 设计实现一个符合生产者和消费者问题的程序 (wait/notify/notifyAll)实现一个装弹射击程序
题目: 采用Java多线程技术(例如wait和notify),设计实现一个符合生产者和消费者问题的程序,对一个对象(枪膛)进行操作,其最大容量是20颗子弹。 生产者线程是一个压入线程,他不断向枪膛中压入子弹;消费者线程是一个射出线程,它不断从枪膛中射出子弹。一. 初步实现 请先自己做一遍在看我的思路。 分析: 两个线程,一个装弹,一个开火。那就开启两个线程。两个线程各干自己的活,自己干了活还要通知对方(我干了些,你也别歇着了!)。 然后再思考,他们是始终不会结束的,那么他们要在一个原创 2020-06-10 00:09:05 · 655 阅读 · 0 评论 -
等待/通知机制 notify() 、notifyAll()、wait()使用
等待/通知机制: 类似于生产者与消费者的关系。是指一个线程A调用了对象Object的wait()方法进入等待状态。另一个线程B调用notify()或notifyAll()方法,通知进入等待的线程。线程A收到通知后,从等待中返回,继续执行后面的操作。一. 方法解释说明1. wait() 方法waitpublic final void wait() throws InterruptedException 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当原创 2020-06-08 21:26:01 · 742 阅读 · 0 评论 -
ThreadLocal 线程不安全问题分析
我们知道ThreaLocal是线程的副本,每个线程都持有各自的ThreadLocal副本,互不干扰,那么又怎么会有线程安全问题呢?一. 先来一个实验案例/** * @author charles * @createTime 2020/6/7 14:39 * @description threadLocal 可能产生的线程不安全因素测试 */public class ThreadLocalUnSafe extends Thread{ private static Company c原创 2020-06-07 15:27:10 · 1953 阅读 · 1 评论 -
理解ThreadLocal 可能产生的内存泄漏风险
内存泄漏(Memory Leak): 是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存溢出(Out Of Memory): (简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用原创 2020-06-07 14:35:58 · 1474 阅读 · 0 评论 -
ThreadLocal的工作原理分析及应用
ThreadLocal 用在变量跟着线程变化时。Spring事物中数据库的连接就是使用ThreadLocal存放的。一.ThreadLocal的官方说明jdk ThreadLocal的解释说明: This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its {@原创 2020-05-18 23:00:05 · 226 阅读 · 0 评论 -
java volatile 关键字的原理及使用
一、基本概念Java 内存模型中的可见性、原子性和有序性。可见性: 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。 也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个原创 2020-05-18 16:20:48 · 214 阅读 · 0 评论 -
java创建新的线程 :有两种方式 or 三种方式?
在看很多的关于java创建新线程的博客中,发现有的说创建新的线程有两种方式,有的说是三种方式。但是到底是哪一种是正确的呢 ?两种创建方式: 一种是将类声明为Thread的子类,该类应重写Thread类的run方法,另一种是实现Runnable接口,并实现run方法。三种创建方式: 在前面两种的方式+ 第三种:实现Callable< V > 接口,实现call方法。 ...原创 2020-05-02 23:32:35 · 629 阅读 · 0 评论 -
证明:java程序 是一个的多线程程序
当我们在使用java编程的时候只启动了一个main方法,在我以前的认知中就是开启了一个主线程,就没有其它的了。但是真的是只有main 线程吗? /** * @author charles * @date 2020/5/2 12:29 * @desc 启动一个main方法 实际上只是启动了一个 main线程吗 */ public stati...原创 2020-05-02 17:10:31 · 296 阅读 · 0 评论 -
java 多线程 Thread的方法 常用方法 总结 interrupt()中断标识位详解
Thread的方法有很多,但是经过JDK版本的迭代与bug的修复,使得一些方法逐渐过时,并被标识为不推荐使用,接下来我们就一起看下Thread的方法的使用:一. 不推荐使用的方法1. stop() 方法Jdk解释说明:Forces the thread to stop executing. 由于该方法是强制性停止线程执行,可能导致一些资源不能被正常回收。因此不推荐使用。2. de...原创 2020-05-06 00:06:57 · 701 阅读 · 0 评论