并发编程
并发编程基础
JMM
三大特性
阻塞队列
工具类
一点博客
小董
展开
-
countDownLatch理解与使用
CountDownLatch概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。CountDownLatch的用法原创 2020-12-06 16:36:35 · 600 阅读 · 0 评论 -
多线程面试题-1:list添加元素到一定个数另一个线程给出提示
题目:实现一个容器,提供两个方法,add,size 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束;解法一:notify与wait实现import java.util.ArrayList;import java.util.List;public class T01_withNotify { static List list = new ArrayList(); void add(int i) { li原创 2020-12-06 10:49:27 · 552 阅读 · 1 评论 -
线程交互数据Exchanger的使用
如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到Exchanger这个类,Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返回时给出的对象。示例代码:import java.util.concurrent.Exchanger;import java.util.concurrent.TimeUnit;import java.util.concur原创 2020-12-05 19:02:07 · 133 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁简单示例
一、读写锁简介使用场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源(共享锁);但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了(排它锁);针对这种场景,JAVA的并发包提供了读写锁ReentrantReadWriteLock,它表示两个锁,一个是读操作相关的锁,称为共享锁;一个是写相关的锁,称为排他锁,描述如下:线程进入读锁的前提条件:没有其他线程的写锁,没有写原创 2020-12-05 18:37:44 · 386 阅读 · 0 评论 -
JAVA volatile关键字的作用
先看代码package com.test.day02;public class T04_volatile { /*volatile*/ boolean flag = true; synchronized void m() { System.out.println("m start"); while (flag) { } System.out.println("m end"); } public st原创 2020-11-25 21:09:17 · 276 阅读 · 1 评论 -
线程中异常将释放锁简单示例
package com.test.day02;import java.util.concurrent.TimeUnit;public class T03_exception { int count; synchronized void m() { while (true) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedEx原创 2020-11-25 19:57:13 · 146 阅读 · 0 评论 -
synchronized可重入锁的简单理解
示例public class T02_synchronized { synchronized void m1() { System.out.println("m1 start"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } m2();原创 2020-11-23 20:59:07 · 272 阅读 · 0 评论 -
多线程未加锁产生脏读简单示例
模拟银行账户,对写方法加锁,对读方法不加锁产生脏读问题public class T01_synchronized { static class Account { String name; double balance; public Account(String name, double balance) { this.name = name; this.balance = balance;原创 2020-11-23 20:48:47 · 196 阅读 · 0 评论 -
线程Sleep、Join、Yield方法基本使用
sleep/join/yield基本使用/** * @author Administrator * @date 2020/11/22 * @description */public class T03_sleep_join_yield { public static void main(String[] args) { testYield(); } /** * sleep方法 sleep结束后进入就绪状态 */ priv原创 2020-11-22 18:46:46 · 189 阅读 · 0 评论 -
创建线程的三种方式
三种方式: 继承Thread类、实现Runnable、实现Callableimport java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @author Administrator * @date 2020/11/22 * @description 如何创建线程,三种 方式 */public c原创 2020-11-22 17:58:08 · 390 阅读 · 1 评论