随笔分类 -  并发编程

讲述线程的基础知识以及并发编程
MySQL间隙锁问题
摘要:间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。 最近用户反馈说系统老是出现insert时,等待超时了,最后发现是insert间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是 阅读全文
posted @ 2019-09-09 02:35 kosamino 阅读(3734) 评论(0) 推荐(1) 编辑
Java并发编程之线程池及示例
摘要:1、Executor 线程池顶级接口。定义方法,void execute(Runnable)。方法是用于处理任务的一个服务方法。调用者提供Runnable 接口的实现,线程池通过线程执行这个 Runnable。服务方法无返回值的。是 Runnable 接口中的 run 方法无返回值。 常用方法 -v 阅读全文
posted @ 2019-05-06 01:54 kosamino 阅读(1407) 评论(0) 推荐(0) 编辑
并发容器(练习题)
摘要:题目: 启动若干线程,并行访问同一个容器中的数据。保证获取容器中数据时没有数据错误,且线程安全。如:售票,秒杀等业务。 import java.util.ArrayList; import java.util.List; public class Test_01 { static List list = new ArrayList(); // static List list... 阅读全文
posted @ 2019-04-23 00:40 kosamino 阅读(168) 评论(0) 推荐(0) 编辑
Java并发编程之并发容器
摘要:解决并发情况下的容器线程安全问题的。给多线程环境准备一个线程安全的容器对象。 线程安全的容器对象: Vector, Hashtable。线程安全容器对象,都是使用 synchronized 方法实现的。 concurrent 包中的同步容器,大多数是使用系统底层技术实现的线程安全。类似 native 阅读全文
posted @ 2019-04-19 01:22 kosamino 阅读(861) 评论(0) 推荐(0) 编辑
Java并发编程之同步
摘要:1、synchronized 关键字 synchronized 锁什么?锁对象。 可能锁对象包括: this, 临界资源对象,Class 类对象。 1.1 同步方法 synchronized T methodName(){} 同步方法锁定的是当前对象。当多线程通过同一个对象引用多次调用当前同步方法时 阅读全文
posted @ 2019-04-16 01:31 kosamino 阅读(860) 评论(0) 推荐(0) 编辑
生产者消费者(练习题:容器)
摘要:题目(生产者消费者模式):自定义同步容器,容器容量上限为10。可以在多线程中应用,并保证数据线程安全。 方式一:synchronized 方法二:ReentrantLock 区别:synchronized的notify会唤醒所有的线程(生产者+消费者),而ReentrantLock的Conditio 阅读全文
posted @ 2019-04-16 00:58 kosamino 阅读(267) 评论(0) 推荐(0) 编辑
ReentrantLock示例说明
摘要:1、ReentrantLock锁 结果: 2、ReentrantLock尝试锁 结果: 3、ReentrantLock可打断锁 结果: 4、ReentrantLock公平锁 结果(ReentrantLock两种都与可能,但是TestSync只可能出现后一种): 阅读全文
posted @ 2019-04-16 00:29 kosamino 阅读(586) 评论(0) 推荐(0) 编辑
线程同步的实现方式(volatile、synchronized、CountDownLatch)
摘要:题目: 自定义容器,提供新增元素(add)和获取元素数量(size)方法。启动两个线程。 线程1向容器中新增10个数据。线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止。 方法一:volatile 方法二:synchronized 方法三:CountDownLatch 阅读全文
posted @ 2019-04-03 02:23 kosamino 阅读(407) 评论(0) 推荐(0) 编辑
解析ReentrantLock实现原理
摘要:在Java中通常实现锁有两种方式,一种是synchronized关键字,另一种是Lock(Lock的实现主要有ReentrantLock、ReadLock和WriteLock)。synchronized是基于JVM层面实现的,而Lock是基于JDK层面实现的。synchronized是基于Monit 阅读全文
posted @ 2019-03-28 23:56 kosamino 阅读(386) 评论(0) 推荐(0) 编辑
多线程同步synchornized、volatile、Atomic、CountDownLatch示例
摘要:synchronized关键字 锁对象。synchronized(this)和synchronized方法都是锁当前对象。 同步方法 - static:静态同步方法,锁的是当前类型的类对象。在代码中就是类名.class 同步方法 - 原子性 加锁的目的: 就是为了保证操作的原子性。 同步方法 - 同 阅读全文
posted @ 2019-03-28 23:37 kosamino 阅读(345) 评论(0) 推荐(0) 编辑
synchronized锁机制 之 代码块锁(转)
摘要:synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用synchronized同步语句块来解决问题。看一下例子: 下面例子是优化后的例子使用代码块锁,原先 阅读全文
posted @ 2019-03-28 01:59 kosamino 阅读(4054) 评论(0) 推荐(0) 编辑
java命令分析线程死锁以及内存泄漏
摘要:一、介绍 jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: 命令格式 主要分为两个功能: 阅读全文
posted @ 2019-03-06 02:26 kosamino 阅读(6171) 评论(0) 推荐(0) 编辑
Jstack定位CPU使用最多的线程及代码
摘要:jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。 寻找进程 执行命令jps找出Java进程ID, 阅读全文
posted @ 2019-03-06 01:44 kosamino 阅读(1782) 评论(0) 推荐(0) 编辑
volatile是否就是原子性/线程同步的
摘要:在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了同步块synchronized和volatile关键字机制。 synchronized 阅读全文
posted @ 2017-08-09 01:00 kosamino 阅读(432) 评论(0) 推荐(0) 编辑
线程同步
摘要:一.简介 在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。 线程同步:即当有一个线程在对内存进行操作时,其他线程都不可 阅读全文
posted @ 2016-10-11 02:32 kosamino 阅读(308) 评论(0) 推荐(0) 编辑
java中的sleep()和wait()的区别
摘要:对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。 sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会 阅读全文
posted @ 2016-10-08 23:16 kosamino 阅读(292) 评论(0) 推荐(0) 编辑
线程Thread的基础知识学习
摘要:一.线程的基本概念 1.线程是一个程序内部的顺序控制流。 2.Java的线程是通过java.lang.Thread类来实现的。 3.VM启动时会有一个由主方法{public static void main(Args[] String)}所定义的线程。 4.可以通过创建新的Thread实例来创建新的 阅读全文
posted @ 2016-09-30 00:59 kosamino 阅读(521) 评论(0) 推荐(0) 编辑