![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
lovezhaohaimig
这个作者很懒,什么都没留下…
展开
-
java多线程之Semaphore
理论Semaphore:一个可计数的信号量。一般,一个semaphore 信号量是一组许可证。如果必要,那个每次acquire获取许可都是阻塞的,直接一个许可证是可用的,并获取到。每次release释放,都会增加一个许可证,潜在的,也会释放一个阻塞请求。然而。并非每次许可对象都可以被使用的,这个Semaphore信号量只保存几个可用的许可证和相应的操作。方法 Semaphore(in...原创 2019-04-24 20:13:13 · 242 阅读 · 0 评论 -
精通高并发必须掌握的18个核心技术
一、高并发、多线程1.高并发高并发是请求,指的是多个客户端同一时刻向服务端发送请求, 它是一种现象。比如,在双11凌晨12:00分同时有10万个下单请求。高并发标准:高并发用户数 TPS(Transactions Per Second)每秒事务数 QPS(Query Per Second)每秒查询率等。2.多线程多线程是处理,指的是同一时刻多个执行者处理同一类的任务,...原创 2019-05-15 10:55:45 · 2055 阅读 · 0 评论 -
使用Fork/Join框架
使用Fork/Join框架首先要考虑到的是如何分割任务,如果希望每个子任务最多执行两个数的相加,那么我们设置分割的阈值是2,由于是4个数字相加,所以Fork/Join框架会把这个任务fork成两个子任务,子任务一负责计算1+2,子任务二负责计算3+4,然后再join两个子任务的结果。因为是有结果的任务,所以必须继承RecursiveTask,package cn.day17;impo...原创 2019-06-03 18:26:45 · 135 阅读 · 0 评论 -
多线程下的单例模式(双端检索模式)
package zc.zhm.day1;public class SingletonDemo { private static volatile SingletonDemo instance = null; public SingletonDemo() { System.out.println("我是构造SingletonDemo()。。。。"); } public stat...原创 2019-07-06 18:37:07 · 4194 阅读 · 3 评论 -
共享锁(读写锁)
1.指该锁可被多个线程所持有不加出现问题代码如下:package cn.link.lock;import java.sql.Timestamp;import java.util.HashMap;import java.util.Map;import java.util.Timer;import java.util.concurrent.TimeUnit;import j...原创 2019-07-16 23:40:34 · 2234 阅读 · 0 评论 -
Java几种方式实现生产者与消费者
第一种是 用wait 和 notify第二种是await 和signal实现代码实现如下:package cn.link.cn.jisun;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurr...原创 2019-07-26 00:40:53 · 249 阅读 · 0 评论 -
Synchronized 和Lock的区别
原创 2019-07-26 00:47:09 · 114 阅读 · 0 评论 -
JAVA锁
1.Lock ()(不死不休)2.boolean tryLock = lock.tryLock();子线程获取锁(浅尝辄止) 只要别人占用了锁 则就会获取锁失败new Thread(new Runnable() { public void run() { //子线程获取锁(浅尝辄止) boolea...原创 2019-09-27 23:09:51 · 207 阅读 · 1 评论 -
CountDownLatch实现原理及使用
1.CountDownLatch工作原理 CountDownLatch在多线程并发编程中充当一个计时器的功能,并且维护一个count的变量,并且其操作都是原子操作,该类主要通过countDown()和await()两个方法实现功能的,首先通过建立CountDownLatch对象,并且传入参数即为count初始值。如果一个线程调用了await()方法,那么这个线程便进入阻塞状态,并...原创 2019-03-26 11:46:10 · 17087 阅读 · 5 评论 -
RecursiveTask Fork/join使用
让我们通过一个简单的需求来使用Fork/Join框架,需求是:计算1+2+3+4的结果。使用Fork/Join框架首先要考虑到的是如何分割任务,如果希望每个子任务最多执行两个数的相加,那么我们设置分割的阈值是2,由于是4个数字相加,所以Fork/Join框架会把这个任务fork成两个子任务,子任务一负责计算1+2,子任务二负责计算3+4,然后再join两个子任务的结果。因为是有结果的任务,所以必...原创 2019-01-17 14:36:18 · 4070 阅读 · 0 评论 -
《深入理解 Java 内存模型》
《深入理解 Java 内存模型》程晓明著,该书在以前看过一遍,现在学的东西越多,感觉那块越重要,于是又再细看一遍,于是便有了下面的读书笔记总结。全书页数虽不多,内容讲得挺深的。细看的话,也是挺花时间的,看完收获绝对挺大的。也建议 Java 开发者都去看看。里面主要有 Java 内存模型的基础、重排序、顺序一致性、Volatile 关键字、锁、final。本文参考书中内容。基础并发编程的模型分类在并...原创 2018-05-22 19:54:33 · 191 阅读 · 0 评论 -
synchronized同步块和volatile同步变量
初遇Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。synchronized同步块Java中的同步块用synchronized标记。同步块在Java中是同步在某个对象上。所有同步在一个对象上的同步块在同时只能被一个线程进入并执...原创 2018-06-03 22:57:22 · 220 阅读 · 0 评论 -
Java并发和多线程2 实现求和
题目是利用多线和求1到20000的和 以8个线程为例package cn.zhm.day4;public class MutableInteger { int value = 0; MutableInteger(int value) { this.value = value; }}package cn.zhm.day4;/** * 开启8个线程求对从1到20,...原创 2018-05-23 23:19:42 · 4835 阅读 · 0 评论 -
NIO解理学习
Nio:非阻塞原创 2018-05-28 20:32:41 · 94 阅读 · 0 评论 -
CountDownLatch的详细理解
CountDownLatch的概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然...转载 2018-07-09 11:20:38 · 189 阅读 · 0 评论 -
理解new Thread的弊端及Java四种线程池的使用
1.new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start(); 说说弊端:a. 每次new T...转载 2018-12-05 16:31:34 · 1342 阅读 · 0 评论 -
java并发面试题 多线程
多线程java中有几种方法可以实现一个线程? 答:在Java中实现一个线程有两种方法,第一是实现Runnable接口实现它的run()方法,第二种是继承Thread类,覆盖它的run()方法。这两种方法的区别是,如果你的类已经继承了其它的类,那么你只能选择实现Runnable接口了,因为Java只允许单继承的。如何停止一个正在运行的线程? 答:当不阻塞时候设置一个...原创 2018-05-22 19:22:28 · 236 阅读 · 0 评论