
并发编程
并发编程实践
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
纯洁的明依
我们的服务是:编程资料大全-原创深度技术文章。免费技术资讯 公众号:纯洁的明依
展开
-
mina socket 通信 java.io.IOException: Too many open files Failed to open a selector
java.io.IOException: Too many open files Failed to open a selectorFailed to create a new instance of org.apache.mina.transport.socket.nio.NioProcessor:null修改之后: public void init() { NioSocketConnector connector = new NioSocketConnector(); conn原创 2020-12-05 15:26:39 · 1947 阅读 · 0 评论 -
当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题: 如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少?一致 Hash 算法
一致 Hash 算法当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题:如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少。Hash 取模随机放置就不说了,会带来很多问题。通常最容易想到的方案就是 hash 取模了。可以将传入的 Key 按照 index = hash(key) % N 这样来计算出需要存放的节点。其中 hash 函数是一个将...原创 2019-03-12 15:58:56 · 843 阅读 · 0 评论 -
限流是解决高并发大流量的一种方案,至少是可以保证应用的可用性
# 限流算法推荐微信公众号:【矿洞程序员】文章由高端社区fameLink联合创始人陶德与我及其他社区大佬联合发表。关注【矿洞程序员】可获得大咖陶德的私人微信。限流是解决高并发大流量的一种方案,至少是可以保证应用的可用性。通常有以下两种限流方案:- 漏桶算法- 令牌桶算法## 漏桶算法 的使用
如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止之后才 从thread.join()返回。线程Thread除了提供join()方法之外,还提供了join(long millis)和join(long millis,int nanos)两个具备超时特性的方法。这两个超时方法表示,如果线程thread在给定的超时 时间里没有终止,那么将会从该超时方...原创 2018-03-13 15:14:03 · 329 阅读 · 0 评论 -
java 线程总结(一)
1 Java程序天生就是多线程程序public class MultiThread{public static void main(String[] args) {// 获取Java线程管理MXBeanThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();// 不需要获取同步的monitor和synchron...原创 2018-03-09 10:40:33 · 225 阅读 · 0 评论 -
java 内存模型的基础
1.1 .1 并发编程模型的两个关键问题 a:线程之间如何通信(交换信息) b :线程之间如何同步 在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 同步:是指程序中用户控制不同线程间操作发生相对顺序的机制。在共享内存并发模型里,同步时显示进行的。程序员必须制定某个方法需要在线程之间互斥执行。在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步时隐式进行的。...原创 2018-02-08 16:11:07 · 170 阅读 · 0 评论 -
Java中如何实现原子操作?
在Java中,J实现原子操作 可以通过锁和循环CAS的方式来实现原子操作。 1 使用循环CAS操作原子操作 package com.yy;import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger;/** * Created by wo o原创 2018-02-06 15:39:07 · 810 阅读 · 0 评论 -
Java并发机制(-synchronized的实现原理与应用)
1 synchronized的实现原理与应用 1.1 偏向锁和轻量级锁以及锁的存储结构和升级过程 1.1.1 实现同步的基础,Java中每一个对象都可以作为锁 a:对于普通同步方法,锁是当前实例对象。 b:对于静态同步 方法,锁是当前类的Class对象。 c:对于同步方法块,锁是synhronized 括号里配置的对象。 1..2 Java对象头:原创 2018-02-06 13:47:19 · 238 阅读 · 0 评论 -
Java 内存模型(三)-从源代码到指令序列的重排序
在执行程序时。为了提高性能,编译器和处理器常常会对指令做重排序。重排序分为3中类型: 1 编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。 2 指令级并行的重排序。现代处理器采用了指令集并行技术(ILP) ,来讲多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对机器指令的执行顺序。 3 内存系统的重排序。由于处理器使用缓存和读/写缓冲区。这便得...原创 2018-02-09 16:40:45 · 550 阅读 · 0 评论 -
java 内存模型的基础(二)
Java 内存模型抽象示意图如下: 如果线程A与线程B之间要通信的话,必须要经历下面2个步骤。 1 线程A把本地内存A中更新过的共享变量刷新到主内存中去。 2 线程B到主内存中去读取线程A之前已经更新过的共享变量。 下面通过示意图来说明这步骤 JMM作用:控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证。...原创 2018-02-09 16:24:11 · 167 阅读 · 0 评论 -
網絡Io实现方式
我们在实践中接触最多的网络模型是以太网以及TCP/IP协议栈,UDP在一些场景中也会用到,那么当我们使用Socket 套接字进行网络通信开发时,下面介绍会用到的三种方式。一:BIO方式 BIO即BlockingIO ,采用阻塞的方式实现,也就是一个Socket套接字需要使用一个线程来进行处理。发生建立连接、读数据、写数据、的操作时,都可能会阻塞。这个模式的好处是简单,这样带来的问题是一个原创 2017-11-12 16:23:48 · 382 阅读 · 0 评论 -
HashMap 和 concurrentHaspMap 的陷阱与区别
在多线程并发编程中,我们对于共享的数据对象或者是容器会采用线程安全的集合来存储。Java中 提供了一些线程安全的容器和对象,有些事支持并发的,java.util.concurrent 包中 有很多这样的类。这种方式的效率会比简单的加互斥锁的实现更好,但是有时通过加锁把使用线程不安全的容器代码改为使用线程安全容器的代码时,会遇到一个陷阱。 在一个使用map 存储信息后 ,统计总数的例子中。 一原创 2017-09-10 17:39:39 · 1111 阅读 · 1 评论 -
Java 并发编程 多线程的交互模式
多线程的开发难度远远高于单线程,在多线程开发中,我们需要处理线程间的通信,需要对线程并发做控制,需要做好线程间的协调工作。这里说的多线程指的是单进程内的多线程。 一: 互不通信的多线程模式: 如果线程之间不需要处理共享的数据,也不需要进行动作协调,那么将会非常简单,就是独立的线程各自完成各自线程中的工作。 二:基于共享容器协同的多线程模式 例如在生产者和消费者的例子,我们有一个队列用原创 2017-09-09 14:38:50 · 302 阅读 · 0 评论 -
Java代码 死锁
锁是一个非常有用的工具,运用场景非常多。而且易于理解,下面代码可能引起死锁,使线程t1和线程t2互相等待对方放锁。 /** * Created by 陈晓阳 on 2017/9/9. */ public class DeadLockDemo { private static String A=”A”; private static String B=”B”;原创 2017-09-09 14:18:51 · 314 阅读 · 0 评论 -
java 并发编程之上下文切换
一:多线程执行的程序并不是同时执行的。 CPU给每个线程分配cpu时间片来实现多线程的机制。时间片是cpu给每个线程分配的时间。因为时间片非常短,所以cpu通过不停的切换线程执行,让我们感觉多个线程是同时执行的,时间片一般为几十毫秒。二: 什么是上下文切换? 任务从保存到再加载的过程就是一次上下文切换。三:上下文切换产生的问题? 影响多线程的执行速度原创 2017-09-08 14:40:10 · 519 阅读 · 0 评论