![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
互联网架构
在京奋斗者
这个作者很懒,什么都没留下…
展开
-
学习互联网架构第七课(ThreadLocal的使用)
在说我们的主人公ThreadLocal前,我先给大家说一个场景,大家想想应该怎么做。场景: 路由器、交换机在运行的过程中有可能出现问题,现在我们想收集各个设备的日志信息,收集到的日志我们要存到本地文件当中的,每台设备要有专门一个文件夹与之对应,文件夹的名称就以设备的IP为名,在文件夹内记录是哪天的日志,每天建一个文件夹,如果某设备当天的日志太多,一个文件存放的话不利于阅读,原创 2017-06-16 09:11:15 · 954 阅读 · 0 评论 -
学习互联网架构第八课(单例和多线程)
单例模式,最常见的就是饥饿模式和懒汉模式,一个直接实例化对象,一个在调用方法时进行实例化对象。 大家见的最多的莫过于下面这种单例模式了,这种模式是懒汉模式,就是说只有你调用getInstance方法的时候,它才会创建实例。但是这种方式有个非常致命的问题就是在多线程的情况下不能正常工作。public class Singleton { private static S原创 2017-06-26 20:20:25 · 1371 阅读 · 1 评论 -
学习互联网架构第十课(并发类容器)
并发类容器是专门针对并发设计的,使用ConcurrentHashMap来代替给予散列的传统的HashTable,而且在ConcurrentHashMap中,添加了一些常见复合操作的支持。以及使用了CopyOnWriteArrayList代替Vector,并发的CopyOnWriteArraySet,以及并发的Queue,ConcurrentLinkedQueue和LinkedBlockingQue原创 2017-06-27 22:12:51 · 1007 阅读 · 0 评论 -
学习互联网架构第九课(同步类容器)
同步类容器,常见的有Vectorr和HashTable,这些容器的同步功能其实都是由JDK的Collections.synchronized***等工厂方法去创建的。其底层的机制无非就是用传的synchronized关键字对每个共用的方法都进行同步,使得每次只能有一个线程访问容器的状态。这很明显不满足我们今天互联网时代高并发的需求,在保证线程安全的同时,也必须要有足够好的性能。原创 2017-06-26 23:20:45 · 1020 阅读 · 0 评论 -
学习互联网架构第六课(使用wait/notify模拟Queue)
BlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据。我们要实现LinkedBlockingQueue下面两个简单的方法put和take。 put(anObject):把anObject加到BlockingQueue里,如果BlockingQueue没有空间,则调用此方法的线程被阻断,直到BlockingQueue里面有空间再继续。原创 2017-06-14 15:29:35 · 755 阅读 · 0 评论 -
学习互联网架构第五课(多线程通信---wait和notify)
线程通信概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。 使用wait/notify方法实现线程间的通信。(注意这两个方法都是object的类的方法,换句话说java为所有的对象都提原创 2017-06-14 10:18:16 · 783 阅读 · 1 评论 -
学习互联网架构第一课(线程基础)
首先,我们要搞清楚为什么要学习并发编程?主要有以下三点:第一点:面试非常重要 企业面试程序员标准,考察因素: 1.考察我公司技术你是否熟悉50%以上,或者我们公司有特殊的技术需求,正好你熟悉,那么可能会考虑录用你。 2.细节、态度、人品问题。(1、2条件满足基本上就会录用你) 3.知识面、潜力(这是加分项,如果能把并发的一原创 2017-06-02 16:16:03 · 2584 阅读 · 5 评论 -
学习互联网架构第四课(volatile关键字)
volatile概念:volatile关键字的主要作用是使变量在多个线程间可见。 在说volatile关键字之前,先来看两个小例子package com.internet.thread;public class RunThread extends Thread{ private int num = 0; public void setNum(int nu原创 2017-06-13 14:42:39 · 896 阅读 · 0 评论 -
学习互联网架构第三课(synchronized重入锁)
关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁。关于重入锁的理解,大家可以参考http://blog.csdn.net/u012453843/article/details/72884920这篇博客进行学习。 下面我们来看一个示例,如下所示:package com.i原创 2017-06-07 18:18:20 · 759 阅读 · 1 评论 -
学习互联网架构第二课(脏读)
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。 对于对象的同步和异步的方法,我们在设计自己的程序的时候,一定要考虑问题的整体,不然就会出现数据不一致的错误,很经典的错误就是脏读。 下面我们来看一个脏读的例子package com.internet.thread;原创 2017-06-05 16:26:55 · 879 阅读 · 0 评论 -
学习互联网架构第十一课(并发类容器之Queue)
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。如下图所示。 首先我们来学ConcurrentLinkedQueue,ConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了原创 2017-06-28 23:41:27 · 1579 阅读 · 2 评论