随笔分类 -  Java多线程

摘要:周末看到一个用jstack查看死锁的例子。昨天晚上总结了一下jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令。供大家参考 1.Jstack 1.1 jstack能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况。如下 阅读全文
posted @ 2017-09-28 23:14 ^_TONY_^ 阅读(1524) 评论(0) 推荐(0)
摘要:一、 背景 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池可以对线程进行统一的分配、调优和监控,并有以下好处: 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立 阅读全文
posted @ 2017-09-28 21:50 ^_TONY_^ 阅读(1213) 评论(0) 推荐(1)
摘要:一、什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对Copy 阅读全文
posted @ 2017-09-28 16:55 ^_TONY_^ 阅读(675) 评论(0) 推荐(0)
摘要:1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附加操作:当队列中为空时,从队列中获取元素的操作将被阻塞;当队列满时,向队列中添加元素的操作将被阻塞。 阅读全文
posted @ 2017-09-28 16:27 ^_TONY_^ 阅读(2555) 评论(0) 推荐(1)
摘要:场景描述: 多线程设计过程中,经常会遇到需要等待其它线程结束以后再做其他事情的情况。 有几种方案: 1.在主线程中设置一自定义全局计数标志,在工作线程完成时,计数减1。主线程侦测该标志是否为0,一旦为0,表示所有工作线程已经完成。 2.使用Java标准的类CountDownLatch来完成这项工作, 阅读全文
posted @ 2017-09-27 18:17 ^_TONY_^ 阅读(3032) 评论(0) 推荐(0)
摘要:参考资料: 程晓明:Java内存模型 《Java并发编程的艺术》 《深入理解Java虚拟机:JVM高级特性与最佳实践》 阅读全文
posted @ 2017-09-27 17:21 ^_TONY_^ 阅读(973) 评论(0) 推荐(1)
摘要:一、线程安全性 定义:多个线程之间的操作无论采用何种执行时序或交替方式,都要保证不变性条件不被破坏 “共享”:变量可以由多个线程同时访问; “可变”:变量的值在其生命周期内可以发生改变 如果当多个线程访问同一个可变的状态变量时,没有使用合适的同步,那么程序将会出现错误。有三种方式可以修复该问题: 不 阅读全文
posted @ 2017-09-27 16:17 ^_TONY_^ 阅读(1002) 评论(0) 推荐(0)
摘要:一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起 阅读全文
posted @ 2017-09-24 01:55 ^_TONY_^ 阅读(961) 评论(0) 推荐(0)
摘要:一、synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自《大型网站系统与Java中间件实践》) 案例一:其中foo1和foo2是SynchronizedDemo1类的两个静态方法。在不同的线程中,这两个方法的调用是互斥的,不 阅读全文
posted @ 2017-09-24 01:39 ^_TONY_^ 阅读(957) 评论(0) 推荐(0)
摘要:一、SimpleDateFormat的线程安全问题 为什么SimpleDateFormat是线程不安全的? 下面通过一个案例代码来说明 为什么SimpleDateFormat是线程不安全的? 为什么SimpleDateFormat是线程不安全的? public class DateUtilTest 阅读全文
posted @ 2017-09-24 00:55 ^_TONY_^ 阅读(1256) 评论(0) 推荐(0)
摘要:一、Future Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果。 1、Callable接口类似于Runnable,只是Runnable没有返回值。 2、Callable任务除了返回正常结果之外,如果发生异常,该异常也会被返回,即Future可 阅读全文
posted @ 2014-09-11 14:55 ^_TONY_^ 阅读(2926) 评论(1) 推荐(0)
摘要:一、ThreadLocal基础知识 ThreadLocal是线程的一个本地化对象,或者说是局部变量。当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本 阅读全文
posted @ 2014-09-08 09:23 ^_TONY_^ 阅读(2340) 评论(2) 推荐(1)