自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学习学习再学习

微信公众号“云原生手记”,专注于云原生

  • 博客(18)
  • 资源 (7)
  • 收藏
  • 关注

原创 《java并发编程实战》第三章

不变性         满足同步需求的另一种方法是使用不可变对象。目前为止遇到的多线程并发问题,例如失效数据,丢失更新或者某一对象的状态不一致,这些问题的根源在于操作对象状态的可变性。如果某一个对象在被创建后其状态不能被修改,那么这个对象就被称为不可变对象。记住,不可变对象一定是线程安全的。不可变对象的设计很简单,他们只有一种状态,并且该状态是由构造函数来控制的。 Final域         在...

2018-07-16 09:36:02 293

原创 java线程封闭 ThreadLocal的使用

    当访问共享的可变数据时,通常需要使用同步,一种避免使用同步的方式就是不共享数据。Java提供了ThreadLocal类来方便开发者们实现线程封闭,在这个ThreadLocal类中的某个值与保存值的对象关联起来。ThreadlLocal提供了get与set方法,这些方法为每一个使用该变量的线程都存着一份独立的副本,因此get总是返回当前执行线程再调用set时设置的最新值。 pack...

2018-07-16 09:33:12 265

原创 解决多线程中内存可见性的方式

    上一篇博客已经讲到了内存可见性问题,内存可见性所表现出来的问题就是失效数据,而有效规避这种问题的方法就是同步。本篇博客将告诉你具体采用哪些同步方式可以解决这类问题:加锁,volatile变量。1、  加锁与可见性    内置锁可以确保某个线程以一种可预测的方式来查看另一个进程的执行结果。看下面这张图,当线程A执行某个同步代码块时,线程B随后进入由同一个锁保护的同步代码块,在这种情况下可以保...

2018-07-16 09:27:43 1435 1

原创 《java并发编程实战》_对象的共享&可见性

    要编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理(这句话总结的很好)。我们知道同步代码块和同步方法可以确保以原子的方式执行操作,但一种常见的误解是,认为关键字synchronized只能用于实现原子性或者确定“临界区”。同时...

2018-07-16 09:23:19 248

原创 ubuntu下使用apt-get install安装的软件的相关位置

    有时候需要配置ubuntu安装的软件,一般安装软件都是使用apt-get install。那么安装完后,软件的安装目录在哪里呢,可执行文件又放在哪里呢。    A、下载的软件的存放位置:/var/cache/apt/archives    B、安装后软件的默认位置:/usr/share    C、可执行文件位置:/usr/bin    D、配置文件位置:/etc    E、lib文件位置:...

2018-07-14 15:10:15 31115 2

原创 StringUtils工具类中的小细节,final的应用

看一下下面两份代码:public class StringUtil {//代码1 private StringUtil() { // 工具类不需要实现 } public static boolean isEmpty(final String str) { return (str == null || str.length(...

2018-07-12 16:50:46 800

原创 ubuntu下redis做压测

首先,需要确定redis服务已经开启了,不确定是否开启的可以运行以下命令查看:ps -ef | grep redis一旦看到redis运行的进程,即说明redis服务已经开启了之后运行以下命令对redis做压测:redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000上面这句命令的意思是,100个并发连接,100000个请求最后将输出redis的压...

2018-07-12 11:11:24 172

原创 ubuntu 安装ssh服务

    今天在windows下用vmware安装了一台ubuntu 的虚拟机,再确认ubuntu和本机windows可以相互ping通的情况下,居然不能再windos上通过xshell使用ssh命令登陆到这台虚拟机上。后来看到网上说的,可能是新装的虚拟机没有安装ssh服务,怎么确定没有安装ssh服务呢,你可以运行一下命令:service sshd start    当出现一下结果时,及说明你的虚拟...

2018-07-10 09:42:44 5526

原创 重入 锁

    当某个线程请求由其他线程所持有的锁时,发出请求的线程会被阻塞,然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入“意味着获取锁的粒度是”线程“,而不是”调用“。重入的一种实现方法是,为每一个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有,当线程请求一个未被持有的锁时,jvm将记下锁的持有者,并...

2018-07-09 09:28:34 167

原创 内置锁

    java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block),同步代码块包括了两部分:一个作为锁的对象引用,一个作为由这个锁所保护的代码块。以关键字syschronzied来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。静态的synchronzied方法以Class对象作为锁。    每个Java对象都可以用作一...

2018-07-09 09:27:02 1024

原创 复合操作

    在前两节的程序中都需要包含一组原子方式执行(或者说不可分割)的操作,要避免竟态条件问题,就必须在某个线程修改该变量时,通过某种方式防止其他线程使用这个变量。从而确保其他线程只能在修改操作执行之前或者完成之后读取和修改状态,而不是在修改过程中。     如果递增操作是原子操作,那么竟态条件将不会发生,且递增操作在每次执行时都会把计数器增加1。为了确保线程安全性,“先检查后执行”(例如延迟初始...

2018-07-09 09:24:11 1232

原创 竟态条件

    上一节讲了竟态条件,竟态条件使得最后的结果不准确,当计算的正确性取决于多个线程的交替执行时序时,那么就会发生竟态条件。换句话说,就是正确的结果取决于运气。最常见的竟态条件类型就是“先检查后执行(Check-Then-Act)”操作,即通过一个可能失效的观测结果来决定下一步的动作。     使用“先检查后执行”的一种常见情况就是延迟初始化,延迟初始化的目的是将对象的初始化操作推迟到实际被使用...

2018-07-09 09:14:08 1015

原创 原子性 多线程

    当我们在无状态对象中增加一个状态时,会出现什么情况,假设我们希望增加一个请求数量的统计,一种常见的方式就是在对象中增加一个long类型的域,并且没处理一个请求就将这个值加一。package com.zy.test;public class StatelessDemo { private long count = 0; public void serv...

2018-07-09 09:10:59 466

原创 《java并发编程实战》——无状态的对象是线程安全的

    在平时的项目中,每个模块都会创建多个线程,并在这些线程中调用你编写的代码,因此你需要保证你的代码是线程安全的,通常,线程安全性的需求并非来源于对线程的直接使用。例如以下方法:public class StatelessDemo { public void service() { int n = 0; int m = 1; S...

2018-07-08 11:53:08 402

原创 《java并发编程实战》——线程安全性

    要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变的(Mutable)状态的访问。从非正式的意义上说(为啥这么讲我也不知道,可能这么说读者更容易理解),对象的状态是指存储在状态变量(例如实例或者静态域)中的数据。对象的状态可能包括其他依赖对象的域(意思是对象中嵌套使用了其他对象,例如HashMap中有Map.Entry一样)。    “共享”意味...

2018-07-08 11:36:15 171

原创 docker容器内部执行apt-get install vim报:unable to locate package vim

场景描述,刚从docker hub上拉取镜象ubuntu(运行命令:docker run -it ubuntu)。进入容器后,执行apt-get install vim。却报出unable to locate package vim。原因是,你第一次进容器还未执行apt-get update...

2018-07-03 09:57:01 2775

原创 docker(2)——docker的安装与运行以及下载加速

首先,我们要搭建自己的实验环境,环境选择:容器需要管理工具、runtime和操作系统。我们的选择如下:    (1)管理工具:docker engine(目前最流行使用)    (2)runtime-runc(docker默认的runtime)    (3)操作系统——ubuntu(自己用vmware装个虚拟机)安装流程如下:配置Docker的apt源1、安装包,允许apt命令https访问doc...

2018-07-03 08:10:05 441

原创 docker(1)——容器生态系统

    首先得对容器有个整体的认识,之后我们学习才能够更有针对性。一谈到容器就会想到docker,docker几乎成了容器的代名词了。    好了,言归正传,容器生态系统包括了核心技术、平台技术和支持技术。(1)容器核心技术    是指能够让container在host上运行起来的那些技术。这些技术包括了容器规范、容器runtime,容器管理工具、容器定义工具、registry以及容器OS。下面开...

2018-07-02 22:45:13 764 1

mysql高性能索引读书笔记

《高性能Mysql》第五章的读书笔记,记录的都是要点,以思维导图的方式呈现。

2018-11-01

精通tomcat

精通tomcat 学习tomcat原理 tomcat实现,精通tomcat 学习tomcat原理 tomcat实现

2018-05-12

阿里巴巴JAVA开关手册,java编码规范

阿里巴巴JAVA java编码规范 java变成习惯。一本很好的java开发规范文档

2018-05-12

《Spring Boot实战》源代码

书籍Spring Boot实战 源代码, Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码 Spring Boot实战 源代码

2018-05-10

单片机课件

好几个单片机课程课件,初学者很适用,都是属于入门级的,就像教程一样

2014-01-11

MSP430 TI常用程序集

MSP430常用的程序都在里面,包括LED,中断定时

2014-01-11

郭天祥51单片机程序大集合

郭天祥十天学会单片机程序大集合,由浅入深,适合初学者以及单片机爱好者的使用

2014-01-11

空空如也

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

TA关注的人

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