![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
互联网架构
海边拾贝seebit
有广度,有深度,有灵魂的工程师
展开
-
多个线程多个锁
1. 多个线程多个锁概念 多个线程多个锁:多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体的内容。2. 示例【com.bjsxt.base.sync002】MultiThreadpublic class MultiThread { private int num = 0; public synchronized vo...原创 2018-06-24 18:56:13 · 194 阅读 · 0 评论 -
高可用性
如果有一台主服务器,两台从服务器。由于一些原因如网络,硬件故障,主服务器挂掉了,会导致主从服务器不可用,整个Redis集群服务提供不了。一般由几个主节点,如果某一个主节点挂了,可以切换到另一个主节点,而挂掉的主服务器节点下的从节点可以直接跟切换到的主节点关联。主节点修复好了,可以重新加入到集群中。...原创 2018-08-18 13:48:33 · 181 阅读 · 0 评论 -
扩展性
场景:有三台服务器,其中有一台主服务器,两台从服务器。一般主节点可读可写,从节点不支持写,只读。扩展性:水平扩展和垂直扩展水平扩展:不断在集群中新加主服务器和从服务器垂直扩展:不断在主服务器中添加新的硬盘...原创 2018-08-18 13:42:45 · 645 阅读 · 0 评论 -
ThreadLocal
一、概念ThreadLocal概念:线程局部变量,是一种多线程间并发访问变量的解决方案。与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保证线程安全。从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的...原创 2018-07-13 23:05:16 · 93 阅读 · 0 评论 -
使用wait/notify模拟底层阻塞队列Queue
一、使用wait/notify模拟QueueBlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据。我们要实现LinkedBlockingQueue下面两个简单的方法put和take。put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断,直到BlockingQueue里面...原创 2018-07-13 06:41:00 · 509 阅读 · 0 评论 -
线程之间通信
一、线程通信概念线程通信概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。使用wait/notify方法实现线程间的通信。(注意:这两个方法都是Object的类的方法,换句话说java为所有的对象都提...原创 2018-07-12 18:46:51 · 118 阅读 · 0 评论 -
LinkedHashMap
1. 线程通信概念线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。2. 使用wait/notify方法实现线程间的通信注意这两个方法都是Object的类的方法,换句话说java为所有的对象...原创 2018-07-06 05:09:05 · 143 阅读 · 0 评论 -
volatile关键字概念
1. volatile概念 volatile关键字的主要作用是使变量在多个线程间可见。2. 示例【com.bjsxt.base.sync007】RunThreadpublic class RunThread extends Thread { private boolean isRunning = true; private void setRunning...原创 2018-06-27 08:58:10 · 310 阅读 · 0 评论 -
volatile关键字概念
1. volatile概念 volatile关键字的主要作用是使变量在多个线程间可见。2. 示例【com.bjsxt.base.sync007】RunThreadpublic class RunThread extends Thread { private boolean isRunning = true; private void setRunning...原创 2018-07-01 08:54:19 · 141 阅读 · 0 评论 -
synchronized代码块
1. 使用synchronized声明的方法在某些情况下是有弊端的,比如A线程调用同步的方法执行一个很长时间的任务,那么B线程就必须等待比较长的时间才能执行,这样的情况下可以使用synchronized代码块去优化代码执行时间,也就是通常所说的减小锁的粒度。示例:【com.bjsxt.base.sync006】Optimizepublic class Optimize { p...原创 2018-06-26 09:07:37 · 310 阅读 · 0 评论 -
Atomoic使用
public class AtomicUse { private static AtomicInteger count = new AtomicInteger(0); //多个addAndGet在一个方法内是非原子性的,需要加synchronized进行修饰,保证4个addAndGet整体原子性 public int multiAdd(){ try { ...原创 2018-06-30 10:10:57 · 736 阅读 · 0 评论 -
volatile关键字的非原子性
public class VolatileNoAtomic extends Thread { private static volatile int count; private static void addCount(){ for(int i = 0; i < 1000; i++){ count++; } ...原创 2018-06-30 09:52:48 · 499 阅读 · 0 评论 -
synchronized其他概念
1. synchronized锁重入: 关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁。2. 示例:【com.bjsxt.base.sync005】SyncDubbo1public class SyncDubbo1 { public synchroni...原创 2018-06-25 17:03:33 · 148 阅读 · 0 评论 -
脏读
1. 脏读 对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑问题的整体,不然就会出现数据不一致的错误,很经典的错误就是脏读(dirtyRead)2. 示例【com.bjsxt.base.sync004】DirtyReadpublic class DirtyRead { private String username = "bjsxt"; pr...原创 2018-06-25 14:31:57 · 1610 阅读 · 0 评论 -
对象锁的同步和异步
1. 同步synchronized 同步的概念就是共享,我们要牢牢记住“共享”这两个字,如果不是共享的资源,就没有必要进行同步。2. 异步asynchronized 异步的概念就是独立,相互之间不受任何制约。就好像我们学习http的时候,在页面发起的ajax请求,我们还可以继续浏览或操作页面的内容,二者之间没有任何关系。3. 同步的目的 同步的目的就是为了线程安...原创 2018-06-24 20:22:38 · 106 阅读 · 0 评论