自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Yin

我不想文艺,我只想做这行业的精英,甚至精英还不够。

  • 博客(101)
  • 收藏
  • 关注

原创 Concurrent programming之性能和可伸缩性

1.资源:资源的含义很广,举几个例子:CPU时钟周期,内存,网络带宽,I/O带宽,数据库请求,磁盘空间等。  2.使用多线程会引入一些开销,包括:a.)线程之间的协调(加锁,触发信号以及内存同步)b.)增加的上下文切换c.)线程的创建和销毁d.)线程的调度 3.可伸缩性指的是:当增加计算资源的时候(内存、CPU、存储容量、I/O带宽),程序的吞吐量或者处理能力能...

2017-05-26 18:45:39 387

原创 Concurrent programming---死锁活锁和饥饿

死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁发生的条件· 互斥条件:线程对资源的访问是排他性的,如果一个线程对占用了某资源,那么其他线程必须处于等待状态,直到资源被释放。· 请求和保持条件:线程T1至少已经保持了一个...

2017-05-26 18:44:58 378

原创 Concurrent programming---避免活跃性危险

1.一些程序是包含死锁风险的,但是并不会立即显示出来,一般死锁发生在高负载的情况下。  2,死锁类别:a.)静态锁顺序死锁:如果两个线程试以不同的顺序获得相同的锁,就会产生锁顺序死锁。如果每个线程都以固定的顺序来获得锁,那么就就不会出现锁顺序死锁。 例子: private final Objectleft = new Object();private final O...

2017-05-26 18:43:43 382

原创 Concurrent programming---任务执行

1.无线创建线程的不足:  如果串行的执行任务,那么我们的阻塞情况可能会很严重,并且服务器的资源利用率非常低,cpu将处于空间状态。 所有有的程序员就为每个请求任务分布一个线程,这的确能带来更快的响应性和更高的吞吐率,但是这同样会带来一些问题。 public static void main(String[]args) throws InterruptedException...

2017-05-26 18:42:46 361

原创 Concurrent programming---基础模块

 1同步容器类的问题: 同步容器类包括Vector和Hashtable,这些类实现线程安全的方式是:把他们的状态封装起来,并对每个共有方法都进行同步,使得每次只有一个线程能访问容器的状态。 首先,同步容器类都是线程安全的,但是在某些情况下需要额外的客户端加锁来保护符合操作,例如迭代、跳转、以及条件运算。 比如有2个方法: public static Object...

2017-05-26 18:41:35 332

原创 Concurrent programming---对象的组合

 1.在类中可能包含约束多个变量的不变性条件,此时这种不变性条件将带来原子性需求,这些相关的变量必须在单个原子操作中进行读取或更新。不能首先更新一个变量,然后再释放锁并再次获得锁然后再更新其他的变量。因为释放锁后,可能会使对象处于无效状态。结论:如果在一个不变性条件中包含多个变量,那么在执行任何访问相关变量的操作的时候,都必须持有保护这些变量的锁。  2.对于从构造函数或者从方...

2017-05-26 18:40:31 327

原创 Concurrent programming-对象的共享

1.同步另一个重要的方面:内存可见性。  2.结论:只要有数在多个线程之间共享,就使用正确的同步。  3.Java内存模型保证了简单的变量读取和写入操作都必须是原子操作,但对于非volatile类型的long和double变量,JVM将64位的读/写操作分解为两个32位的操作。如果变量的读操作和写操作在不同的线程中,那么很可能会读到某个值的高32位和另一个值的低32位置。j...

2017-05-26 18:39:18 353

原创 Concurrent programming---线程安全性

1.多个线程访问的可变变量,如果没有使用合适的同步,那么程序就会出现错误。请注意2个关键字:a.)多个线程。b.)可变变量。因此为了不出现错误,可以针对a.)不在线程之间共享该变量,针对b.)将该变量设置为不可变变量。c.)使用同步。 2.只有当类中仅包含自己的状态时(即不包含其他对象的状态),线程安全类采样才有意义。3.线程安全性:当多个线程访问某个类时,这个类始终都...

2017-05-26 18:37:34 443

原创 安装总结

一.Mysql的安装教程由于本人经常装系统,每次装完系统之后都要重新安装一些软件,安装软件的时候又要上网查找安装的教程,比较麻烦,所以自己整理了MySQL5.7.21解压版的安装方法,以便查看。1.首先,你要下载MySQL解压版,下载地址:https://www.mysql.com/downloads/,图解:2.解压安装包,根据自己的喜好选择路径,我选择的路径是C:\software...

2019-02-18 15:55:10 252

原创 Xpath语法的简单使用

  Xpath语法的简单使用:

2019-02-16 15:53:34 241

原创 资源总结

1.IDEA官方文档中文版:https://www.w3cschool.cn/intellij_idea_doc/(提醒:该网页w3cschool里面有很多文档和教程,如下图)2.XPath教程:http://www.w3school.com.cn/xpath/index.asp3.Mysql教程:https://www.w3cschool.cn/mysql/mysql...

2019-02-16 15:28:20 272

原创 环境设置问题

1.使用idea创建xml文件方法:打开设置弹窗 方法:点击file--otherSetting--Default Setting(快捷键Ctrl+Alt+s)。在搜索框输入template在左侧菜单栏找到并选中File And Code Templates。右侧选中file标签。点击绿色加号+添加模板。name无所谓,extension写xml,然后添加上内容。最后把en...

2019-02-16 15:23:07 248 4

原创 异常统计

1. jar包相关异常遇到的问题:dom4j解析xml出错,java.lang.ClassNotFoundException: org.jaxen.JaxenException;java.lang.NoClassDefFoundError错误遇到问题:今天做项目需要解析xml配置文件,自己使用dom4j解析报错,调试找不到错误。java.lang.ClassNotFoundExcept...

2019-02-16 15:20:33 417

原创 学习Netty之Netty客户端服务端Demo(以前写的了,发出来记录)

客户端代码:public class NettyClient { public static void main(String[] args) { NioEventLoopGroup group = new NioEventLoopGroup(); try{ Bootstrap b = new Bootstrap(); b.group(group).ch...

2018-08-12 12:26:39 633 2

原创 检测死锁

Java中当我们的开发涉及到多线程的时候,这个时候就很容易遇到死锁问题,刚开始遇到死锁问题的时候,我们很容易觉得莫名其妙,而且定位问题也很困难。因为涉及到java多线程的时候,有的问题会特别复杂,而且就算我们知道问题出现是因为死锁了,我们也很难弄清楚为什么发生死锁,那么当我们遇到了死锁问题,我们应该如何来检测和查看死锁呢?Java中jdk 给我们提供了很便利的工具,帮助我们定位和分析死锁问...

2018-08-09 19:50:07 230

原创 (Java实现)获取文件目录下的所有文件名,包括子目录

public class Main { public static void main(String[] args) { String path = "D:/"; File f = new File(path); Main.getFile(f); } public static void getFile(File file){ if(file != ...

2018-08-08 15:50:53 9250

原创 String 对象内存分配(常量池和堆的分配)

    在一次面试中,面试官问了一个关于字符串对象创建问题,问题内容如下:场景一:String s1 = "123" + "456";场景二:String s1 = "123";String s2 = s1 + "456";  在这两个场景下,分别会创建多少个字符串对象?当时其实并没太了解在 JVM 中,字符串对象的内存分配具体策略,只了解在 JVM 中有一个常量池,常量池...

2018-08-08 10:49:17 5553 4

原创 线程池主要属性分析

原文链接 http://blog.csdn.net/sd0902/article/details/8395677Java线程池使用说明一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程...

2018-08-04 10:12:36 2356

原创 ThreadPoolExecutor主要方法源码分析

线程池的源码及原理[JDK1.6实现]1.线程池的包含的内容2.线程池的数据结构【核心类ThreadPoolExecutor】: worker:工作类,一个worker代表启动了一个线程,它启动后会循环执行workQueue里面的所有任务workQueue:任务队列,用于存放待执行的任务keepAliveTime:线程活动保持时间,线程池的工作线程空闲后,保持存活的...

2018-08-03 23:16:54 210

原创 CountDownLatch、CyclicBarrier和Semaphore代码使用

一句话总结三者的区别:Semaphore用来限制资源的使用,比如连接池的Connection. CountDownLatch用于一个线程等待一些子任务完成的时候自己再执行,比如初始化,多个线程一起初始化,等子初始化都完成了,主线程进行处理,这里有主从线程的概念。而CyclicBarrier则没有主从线程的概念,它使得一组线程达到一个统一的状态,比如8个奥运会选手代表8个线程,让他们都走到起跑线的时...

2018-07-30 08:39:34 224

原创 自己动手实现阻塞队列(基于Condition)

阻塞队列的实现其实就是基于等待通知机制,下面我们进行实现:import java.util.Random;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;//我们自己来实现个阻塞队列,主要实现方法是size(),take(),put()即可publ...

2018-07-29 18:03:26 941

原创 生产者消费者模式-(使用wait nofity机制实现和阻塞队列模式实现)

直接给出代码实现:import java.util.LinkedList;import java.util.Queue;public class ProducerAndConsumer { public int queueCapacity; public Queue<Integer> queue = new LinkedList<>(); Produ...

2018-07-29 17:22:02 432

转载 Java并发编程:并发容器之CopyOnWriteArrayList

原文链接:  http://ifeve.com/java-copy-on-write/    Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机...

2018-07-29 15:23:29 185

原创 同步容器也并非线程安全

有一个问题:同步容器真的是安全的吗?  也有有人认为Vector中的方法都进行了同步处理,那么一定就是线程安全的,事实上这可不一定。看下面这段代码:public class Test {    static Vector<Integer> vector = new Vector<Integer>();    public static void main(St...

2018-07-29 14:43:08 277 5

转载 (转自阿里大神)RPC主要实现细节

源地址:http://www.cnblogs.com/LBSer   (为了尊重原作者的工作成果,特放到前面) 在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。  而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队...

2018-07-27 20:59:23 1349

原创 RPC初探-RPC原理

什么是 RPC?    RPC 就是 Remote Procedure Call 三个单词首字母的缩写,其字面意思为:远程过程调用。而远程过程调用直观说法就是:进程 A 远程调用进程 B 的过程方法。既然是远程调用则需要涉及网络传输,由此可见 RPC 主要应用于不同主机间的过程调用,也可用于本机中不同进程之前的过程调用。    简单的说,RPC 就是从一台主机上的进程 A 通过参数传递的方式调用另...

2018-07-27 20:36:19 297

转载 ConcurrentHashMap原理分析

曾经在 [高并发Java 五] JDK并发包1 中提到过ConcurrentHashMap,只是简单的提到了下ConcurrentHashMap的优点,以及大概的实现原理。而本文则重点介绍ConcurrentHashMap实现的细节。HashMap就不介绍了,具体请查看JDK7与JDK8中HashMap的实现HashTable是一个线程安全的类,它使用synchronized来锁住整张...

2018-07-25 09:36:15 175

原创 sleep(),wait(),yield()和join()方法的区别

sleep()   sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。    wait()   wait()方法需要和notif...

2018-07-21 15:52:18 207

原创 一篇搞懂Redis主要功能和机制的实现(笔记)

当你需要一个可以更改的字符串的时候,redis自己实现了一个SDS字符串,它的好处体现在(1)O(1)时间复杂度可以获得 SDS字符串长度(2)通过设计减少了内存分配的次数(通过预留free空间实现的)   C语言的字符串没有记录自己的长度   C语言的字符串的长度总是字符串长度+1,当你需要改变字符串长度和内容的时候,总是要进行内存分配   SDS有2个属性,a.)length b...

2018-07-21 09:04:37 2154

转载 JVM调优

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代) Tenured(年老代) 永久代(Perm)  其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。 年轻...

2018-07-20 10:44:10 148

原创 Java中的run()方法和start()的区别

一、区别Java中启动线程有两种方法,继承Thread类和实现Runnable接口,由于Java无法实现多重继承,所以一般通过实现Runnable接口来创建线程。但是无论哪种方法都可以通过start()和run()方法来启动线程,下面就来介绍一下他们的区别。start方法:通过该方法启动线程的同时也创建了一个线程,真正实现了多线程。无需等待run()方法中的代码执行完毕,就可以接着执行...

2018-07-18 12:15:46 9333

原创 让线程的执行变得有序

线程如何有序执行。(1)使用共享变量的方式:代码如下利用原子递增控制线程准入顺序public class OrderedThread1 { static AtomicInteger count = new AtomicInteger(0); public static void main(String[] args) throws InterruptedException {...

2018-07-18 12:05:56 1254 1

原创 同步与异步,阻塞与非阻塞的关系

这几个知识点其实用处很多,也是很容易搞混的,我们平时可能用了但是并没有发现,今天想来总结一下。 我第一次感受到同步和异步的不同是在学习volatile的时候(因为我之前也没有多线程概念),之前也被同步啊这些概念搞的很乱。当我主线程新建了一个子线程之后两个线程是同时运行的,当时我才发现原来他们不是串行的,献丑了。好了进入正题。从总体来看,同步和异步的概念是大于阻塞与非阻塞,并且他们之间没有对应...

2018-07-18 11:57:36 279

原创 TCP------流量控制和拥塞控制

TCP的流量控制1.概述     所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。     如图所示,说明了利用可变窗口大小进行流量控制。设主机A向主机B发送数据。双方确定的窗口值是400.再设每一个报文段为100...

2018-07-16 16:55:44 265

原创 主键外键

一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如  学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可...

2018-07-04 15:53:35 312

原创 静态代理与动态代理

    静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。     动态代理:在程序运行时,运用反射机制动态创建而程。     直接上代码,代理模式将实际工作类和客户端解耦,通过中间代理进行辅助功能的添加,如下列代码:public interface Account {、、 public void query(); public...

2018-06-10 18:12:18 224

原创 Data Structures and Algorithms-快速排序(个人java实现)

package Sort;public class QuickSort { /* * 快排思路:找到1个基准值,然后进行一次(左右指针的判断)最后保证基准值左边都比基础值小, * 基准值右边都比基准值大,然后在对左右两边继续递归重复这个过程 */ public void display(int[] array){ for(int i=0;i<array...

2018-06-09 09:52:27 267

原创 Data Structures and Algorithms-归并排序(个人java实现)

public class MertSort { //首先我们来理清归并的思路,就假设目前我们有2个数组(A,B数组均有序)需要归并到数组(C)当中,以下为原型, public static void mergTwoArray(int[] arrayA,int[] arrayB,int[] arrayC){ int sizeA = arrayA.length; int sizeB = ...

2018-06-08 22:24:00 262

原创 Data Structures and Algorithms-希尔排序(个人java实现)

package Sort;public class ShellSort { //希尔排序 public static int[] shellSort(int[] array){ int n = array.length; //确定步长 int h=1; while(3*h+1<n){ h=3*h+1; } int counter=1;//第几...

2018-06-08 20:28:52 184

原创 Mysql.Note3

MySQL InnoDB支持三种行锁定方式:· 行锁(Record Lock):锁直接加在索引记录上面。· 间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。· Next-Key Lock:行锁与间隙锁组合起来用就叫做Next-Key Lock。默认情况下,InnoDB工作在可重复读隔离级别下,并且以Ne

2017-07-20 20:44:47 351

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除