Java并发
yayaqwl
会开发的测试
展开
-
Java并发--线程计数器
Java中经常存在以下的需求,启动多个相同或者不同的线程,主线程需要等待所有的线程执行完才继续往下执行要实现上面的需求,基本的思路: 创建一个计数器, 来记录线程的执行有两种实现方法方法1:使用锁和计数器:需要有一个对象锁,作用一:保证这个计数器的线程安全,作用二:阻塞主线程,等待所有线程执行完再来唤醒主线程继续执行方法2:使用Java线程包中的CountDownLatch:不需要加锁, 不需要w...原创 2018-04-06 00:29:41 · 999 阅读 · 0 评论 -
如何控制某个方法允许并发访问线程的个数?
semaphore两个重要的方法就是semaphore.acquire() 请求一个信号量,这时候的信号量个数-1(一旦没有可使用的信号量,也即信号量个数变为负数时,再次请求的时候就会阻塞,直到其他线程释放了信号量)semaphore.release() 释放一个信号量,此时信号量个数+1public class SemaphoreTest { static Semaphore s...转载 2018-08-29 13:21:06 · 1711 阅读 · 0 评论 -
Java锁
本文转自https://blog.csdn.net/zqz_zqz/article/details/70233767/之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不...转载 2018-08-29 11:42:25 · 133 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier的区别
1. 官方概念CyclicBarrier字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。CountDownLatch 一个线程(或者多个), 等待另外N个线程完成某个事情之...原创 2018-08-28 16:52:14 · 467 阅读 · 0 评论 -
JAVA CAS原理以及应用atomic
官方说法:提到CAS,就会想到悲观锁,乐观锁。 CAS是乐观锁。CAS,compare and swap的缩写,中文翻译成比较并交换。独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观...原创 2018-08-21 11:08:49 · 257 阅读 · 0 评论 -
Java并发Java Volatile使用
线程并发的时候, 通常会遇到下面三种问题1)原子性2)可见性3)有序性在阅读这篇文章时,需要先了解以上三种概念,这里不做详细的说明,网上有各种说明,在此略过:Volatile两大作用1 .可见性2. 防止重排(保证有序性) 1. Volatile可见性直接用一段代码来看看并行会出现的问题package com.yaya.java.volatileTe...原创 2018-04-12 11:03:23 · 175 阅读 · 0 评论 -
Java实现线程的方法
有四种方法1)继承Thread public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()"); } } 2) 实现 Runnable 接口public class MyRunnable implements Run...原创 2018-08-23 17:23:17 · 130 阅读 · 0 评论 -
Java并发-ThreadPoolExecutor线程池中BlockingQueue的三种实现
首先先看一下ThreadPoolExecutor线程池的构造方法ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,Rejec...原创 2018-04-04 00:28:09 · 1485 阅读 · 1 评论 -
Java并发-对象锁,类锁
1. Java中加同步锁目前使用synchronized锁目前可以理解为下面两种锁,然后每种锁都可以加在代码上或者方法上(也可以按照方法锁和代码锁分类)第一种分类:1)类锁A : 只加在某块代码中,但是加锁的是类 synchronized(Sync.class)b: 加在静态方法上:public static synchronizedvoid test1() {...}2)对象锁A: 加在某块代...原创 2017-08-29 11:38:17 · 497 阅读 · 0 评论 -
Java sleep wait区别
Java 中 sleep 方法和 wait 方法的区别1)sleep是是属于Thread类的,wait是属于Object类的2)在调用sleep()方法的过程中,线程不会释放锁,而wait方法释放了锁,前提条件是它已经持有锁。所以wait和notify(或者notifyAll)方法都必须被包裹在synchronized语句块3)sleep()需要捕获异常, wait不需要因为Th...原创 2018-08-25 16:58:05 · 148 阅读 · 0 评论