自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java并发编程 同步容器类

同步容器类包括 Vector 和 Hashtable,这些同步的封装器类是由Collections.synchronizedXxx 等工厂方法创建的。这些类实现线程安全的方式是将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。1. 同步器类的问题同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保护复合操作。容器上常见的复合操作包括:迭代(反复访问元素,直到遍历完容器中所有元素)、跳转(根据指定顺序找到当前元素的下一个元素〉以及条件运算,例如“若没有

2021-01-28 23:26:36 288

原创 Java并发编程 设计线程安全的类

在线程安全的程序中,虽然可以将程序的所有状态都保存在公有的静态域中,但与那些将状态封装起来的程序相比,这些程序的线程安全性更难以得到验证,并且在修改时也更难以始终确保其线程安全性。通过使用封装技术,可以使得在不对整个程序进行分析的情况下就可以判断一个类是否是线程安全的。在设计线程安全类的过程中,需要包含以下三个基本要素:1. 找出构成对象状态的所有变量;2. 找出约束状态变量的不变性条件;3. 建立对象状态的并发访问管理策略。要分析对象的状态,首先从对象的域开始。如果对象中所有的域都是基本类型的

2021-01-21 23:03:39 311

原创 Java并发编程-线程封闭

线程封闭当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术就是线程同步,它是实现线程安全性的最简单方式之一。当某个对象封闭在一个线程中,这种用法将自动实现线程安全性,即使被封闭的对象本身不是线程安全的。线程封闭技术的一种常见应用是 JDBC 的 Connection 对象。JDBC 规范并不要求 Connection 对象必须是线程安全的。线程从线程池中获取一个 Connection 对象,并且用该对象处理请求,使用完后再将对

2021-01-20 22:49:35 312

原创 java.lang.IllegalStateException 错误解决过程

java.lang.IllegalStateException 错误解决过程今天在搭建 spring boot 项目的过程中出现了以下的错误,也是花了好长时间才解决,今天我就来分享一下我解决报错的过程。2021-01-18 19:59:28.637 ERROR 19504 --- [ main] o.s.boot.SpringApplication : Application run failedjava.lang.IllegalStateExcept

2021-01-18 20:57:57 25036 3

原创 Java并发编程 对象的共享

Java并发编程 对象的共享1. 可见性可见性是一种复杂的属性。在单线程环境中,如果向某个变量先写入值,然后在没有其他写入操作的情况下读取这个变量,那么总能得到相同的值。然而,当读操作和写操作在不同的线程中执行时,情况却并非如此。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。下面代码说明了当多个线程在没有同步的情况下共享数据时出现的错误。在代码中,主线程和读线程都将访问共享变量 ready 和

2021-01-04 15:04:18 189 1

原创 Java并发编程 线程安全性

Java并发编程 线程安全性“共享”意味着变量可以由多个线程同时访问,而“可变”则意味着变量的值在生命周期内可以发生变化。如何防止在数据上发生不受控的并发访问,是我们需要讨论的点。一个对象是否需要是线程安全的,取决于它是否被多个线程访问。这指的是在程序中访问对象的方式,而不是对象要实现的功能。要使得对象是线程安全的,需要采用同步机制来协同对对象可变状态的访问。如果无法实现协同,那么可能会导致数据破坏以及其他不该出现的结果。当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协

2020-12-28 17:47:21 110

原创 分布式计算模拟

1. 概念分布式计算是一种计算方法,和集中式计算是相对的。随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。2. 简单的分布式计算框架想要实现分布式计算,首先我们至少需要两个进程,一个负责逻辑的准备和逻辑的准备,一个负责执行计算,如小图所示(我们以 JVM 进程为例)这样的计算架构其实就和 client/server 这种架构设

2020-12-21 14:57:26 475 1

原创 Java 并发编程-显式锁

Java 并发编程-显式锁在 Java5.0 之前,在协调对对象的访问时可以使用的机制只有 synchronized 和 volatile。Java5.0 增加了一种新的机制:ReentrantLock,ReentrantLock 并不是一种替代的内置加锁的方法,而是内置加锁机制不适用时,作为一种可选择的高级功能。1. Lock 与 ReentrantLock下面给出了 Lock 接口,Lock 接口中定义了一组抽象的加锁操作,与内置加锁机制不同的是,Lock 提供了一种无条件的、可轮询的、定时

2020-12-14 15:29:59 118

原创 Redis之分布式锁

Redis之分布式锁分布式应用进行逻辑处理时经常会遇到并发问题。比如,一个操作要修改用户状态,修改状态需要先读出用户的状态,在内存里进行修改,改完再存进去。如果有多个系统同时今夕操作,就会出现并发问题,因为读取和保存状态这两个操作不是原子的。这个时候就要使用到分布式锁来限制程序的并发执行。Redis 分布式锁就是最广泛的方案之一。分布式锁分布式锁本质上要实现的目标就是在 Redis 里面占有一个位置,当别的进程也要来占用时,发现已经有人占用了,就只能放弃或者稍后再试。对于这样的操作,我们一般使用

2020-12-11 11:18:14 118

原创 Java并发编程-可利用的并行性

Java并发编程-可利用的并行性Executor 框架帮助指定执行策略,但如果要使用 Executor,必须将任务表述为一个 Runnable。在大多数服务器应用程序中都存在一个明显的任务边界:单个客户请求。有时候,任务边界并非是显而易见的,在很多桌面应用程序中,在单个客户请求中任可能存在可发掘的并行性。本文以 HTML 页面绘制为例,进行详细说明。1. 串行的页面渲染器最简单的方法就是对 HTML 文档进行串行处理。当遇到文本标签时,将其绘制到图像缓存中。当遇到图像引用时,先通过网络获取它,然后再将

2020-12-01 11:18:10 171

原创 Java并发编程 Executor框架

Java并发编程 Executor框架1. 在线程中执行任务在理想情况下,各个任务之间是相互独立的:任务并不依赖于其他任务的状态、结果或者边界效应,独立性有助于实现并发,因为如果存在足够多的处理资源,那么这些独立的任务都可以并行执行。为了在调度与负载均衡等过程中实现更高的灵活性,每项任务还应该表示应用程序的一小部分处理能力。2. 串行的执行任务在应用程序中可以通过多种策略来调度任务,而其中一些策略能够更好地利用潜在的并发性。最简单的策略就是在单个线程中串行地执行各项任务。如下:public cla

2020-11-28 11:17:41 118

原创 Redis之主从同步

Redis之主从同步在很多时候,我们为了达到 Redis 的高可用,我们都会做主从。有了主从,当 master 挂掉的时候,运维让从库来接管,服务就可以继续,否则master 需要经过数据恢复和重启的过程,这就可能会拖很长的时间,影响线上业务的持续服务。1. CAP 原理分布式存储的理论基石1. C - Consistent 一致性2. A - Availability 可用性3. P - Partition tolerance 分区容忍性分布式系统的节点往往都是分布在不同的机器上进行网络

2020-11-24 14:46:53 116 2

原创 Redis 之事务

Redis 之事务为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis 也同样如此。Redis 的事务使用非常简单,不同于关系数据库,我们无须理解那么多复杂的事务模 型,就可以直接使用。1. Redis 事务的基本使用每个事务的操作都有 begin、commit 和 rollback,begin 指示事务的开始,commit 指示 事务的提交,rollback 指示事务的回滚。Redis 事务的形式也是差不多的,分别是 multi/exec/discard1. multi:

2020-11-23 21:40:43 80

原创 安装Windows版RabbitMQ失败总结

安装Windows版RabbitMQ失败总结这几天在学习RabbitMQ,由于实习公司要求安装Windows版本的,试了一下安装Windows版本的RabbitMQ。经过一天的折腾可总算把RabbitMQ给安装好了。1. 错误界面每次输入 rabbitmqctl status 或者 rabbitmqctl 的其他指令时,都会出现类似于下面的错误上述显示的错误主要有三个点:1. 目标节点无法访问2. CLI工具无法通过服务器进行身份验证(cookie不匹配)3. 目标节点未运行2.

2020-11-03 21:45:43 1400

原创 Spark中的map相关的算子以及区别

Spark中map相关算子及区别map算子:map[U](f: (T) => U): RDD[U]是对RDD中的每个元素都执行一个指定的函数开产生一个新的RDD。示例:val conf = new SparkConf().setAppName("WC").setMaster("local[*]")val sc = new SparkContext(conf)val lineRDD = sc.makeRDD(1 to 10) .map(data => {

2020-05-21 13:59:30 788

原创 SpringBoot 整合cache运行出错

SpringBoot 整合cache运行出错在我学习SpringBoot与缓存时,编写了如下代码: @Cacheable(cacheNames = {"emp"}) public Employee getEmployeeById(Integer id){ System.out.println("search "+ id +" number employee"); ...

2020-04-10 15:53:15 692 2

原创 Hive启动报错

Hive启动报错Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory /tmp/hive. Name node is in safe mode.这是因为没有没有关闭HDFS的安全模式,所...

2020-03-14 12:57:27 168

scala-2.12.12 windows版本安装包

有需要下载 scala-2.12.12.msi 的小伙伴,可以直接下载,官网下载实在是太慢了,o(╥﹏╥)o

2020-11-27

空空如也

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

TA关注的人

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