自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 Java并发编程实战之 取消与关闭、线程池的使用

第六章 取消与关闭 6.1 任务取消 协作机制能设置某个标志位,任务会定期查看这个标志,如果设置了标志,那么任务将提前结束。 如果外部代码能在某个操作正常完成之前将其置入“完成”状态,那么这个操作就可以称为可取消的。 如何取消一般有两种方法: 使用状态变量。线程中循环遍历状态变量,检测是否需要结束当前线程。 使用中断。系统提供的大多数阻塞方法会相应中断Thread.interrupt:清除中断状态Thread.isinterrupted;抛出InterruptedException异常;表示阻塞操作由于中

2020-07-22 09:33:48 739

原创 Java并发编程实战之 基础模块构建、任务执行

基础构建模块 委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。 本章主要介绍一些比较有用的并发构建模块,特别是在 Java 5.0 和 Java 6.0 中引入的一些新模块,以及在使用这些模块来构造应用程序时的一些常用模式。 同步容器类 最早出现的同步容器类是Vector和Hashtable,在 JDK 1.2 及之后,又提供了一些功能类似的封装器类,这些同步容器类是由 Collections.synchronizedXxx 等工厂方法创建的。 其实现线程安全的方式是:将它

2020-07-10 19:52:14 426

原创 Java并发编程实战之 线程安全性、对象的共享、对象的组合

线程安全性 当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式修复这个问题: 不在线程之间共享该状态变量 将状态变量修改为不可变类型 在访问状态变量时使用同步 内置锁 Java 提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block)。同步代码块包括两部分:一个作为锁的对象引用,一个作为由这个锁保护的代码块。 synchroized (lock) { // 访问或修改由锁保护的共享状态 } 每个 Java 对象都可以用做一

2020-07-07 13:58:28 846

原创 Spring 之 深入理解 Spring IoC

IoC 是什么 Ioc—Inversion of Control,即“控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。它不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 如何理解“控制反转”好呢?理解好它的关键在于我们需要回答如下四个问题: 谁控制谁 控制什么 为何是反转 哪些方面反转了 在回答这4个问题之前,我们先看 IOC 的定义: 所谓 IOC ,就是由 Spring IO

2020-07-03 13:54:36 282

原创 踩坑日记1——Java字符串 == 与 equals

Java字符串 == 与equals 某天正在刷力扣,遇到一道需要判断字符串是否相等的题目,死活没找到问题所在,后来才发现是==与equals的问题 for (int i = 0; i < len; i++) { // WRONG!会始终为 false 因为两个字符串存储地址不同 // if (words[i] == word1) w1 = i; if (words[i].equals(word1)) w1 = i; ... } 推荐阅读: Hollis:图说:

2020-06-12 17:01:55 1646 2

原创 设计模式1——单例模式

单例模式(Singleton) 特点: 类构造器私有 持有自己类型的属性 对外提供获取实例的静态方法 总之,单例模式就是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种方法。 饿汉模式 饿汉式天生就是线程安全的,比较常用,但容易产生垃圾,因为一开始就要初始化 // 饿汉式单例 public class Hungry { private final static Hungry HUNGRY = new Hungry(); private Hungry() {} pu

2020-06-09 20:37:43 211

原创 Java核心技术 卷 I 读书笔记

Java基础 Java位运算符 与(&)、或(|)、非(~)、异或(^) 与(&):两个操作数中位都为1,结果才为1,否则结果为0 或(|):两个位只要有一个为1,那么结果就是1,否则就为0 非(~):如果位为0,结果是1,如果位为1,结果是0 异或(^):两个操作数的位中,相同则结果为0,不同则结果为1 public class Count{ public static void main(String[] args){ int a=129; // a转换为二进制是100

2020-06-08 08:39:30 468

原创 六大排序算法及Java实现

冒泡排序 基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。 算法平均时间复杂度为O(n^2),且较为稳定 代码实现 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BubbleSort {

2020-06-02 18:50:13 366 1

原创 JVM学习笔记

Java 内存区域与内存溢出异常 Java 程序员不需要像C、C++开发者一样去为每一个 new 操作去写配对的 delete / free 代码,不容易出现内存泄漏和内存溢出问题。但 Java 也把内存控制的权力交给了 Java 虚拟机. 运行时的数据区域 众所周知,Java 虚拟机有自动内存管理机制,如果出现内存泄漏和溢出方面的问题,排查错误就必须要了解虚拟机是怎样使用内存的。 下图是 JDK8 之后的 JVM 内存布局。 程序计数器 程序计数器(Program Counter Register)

2020-05-17 19:16:38 419

原创 Java 堆内存是线程共享的吗?

本文来自作者Hollis:原文链接 问题引出: 1、堆是线程共享的内存区域,栈是线程独享的区域。 2、堆主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。 以上两个结论其实不完全正确。 在解答之前,先想想Java 对象的内存分配过程是如何保证线程安全的? 对象的内存分配过程中,主要是对象的引用指向这个内存区域,然后进行初始化操作。 但是,因为堆是全局共享的,因此在同一时间,可能有多个...

2020-05-06 16:05:03 699 1

原创 ArrayList 系统详解

ArrayList 是最常用的 List 实现类,它适合随机查找和遍历,但不适合插入和删除。 Vector 和 ArrayList 一样,但Vector 不支持线程同步,但线程安全,ArrayList 线程不安全 ArrayList 非线程安全,底层是一个 Object[ ] ,添加到ArrayList中的数据保存在了elementData属性中。所以 ArrayList 具有数组的查询速...

2020-04-13 10:40:21 298

原创 基于Scrapy-redis实现分布式爬虫与热力图分析及KNN算法的预测

基于Scrapy-redis实现分布式爬虫 Scrapy是一个通用的爬虫框架,但其框架本身不支持分布式,为了提高爬取效率 ① 充分利用多台机器的带宽速度爬取数据 ② 充分利用多台机器的IP爬取 Python包要求:pymysql、redis、scrapy、re、urllib、json Github地址:Lianjia_spider Scrapy-Redis原理图 整体框架及逻辑 爬虫及数据...

2020-03-04 14:01:48 466

原创 Pandas实现in与not in筛选数据

Pandas实现in与not in筛选数据 通过df.isin()来判断DataFrame中每个元素是否存在 DataFrame.isin()官方文档 import pandas as pd # 示例数据 df = pd.DataFrame({'user_id' : [1, 2, 3, 4, 5, 6], 'score' : [66, 67, 80, 71, 69, 57]}) # 需被清理...

2020-02-18 22:55:27 9960

原创 Python numpy数组矩阵的合并与拼接

numpy数组拼接 # 示例数组 a = np.array([[1,2], [2,3]]) b = np.array([[3,4], [4,5]]) concatenate: 提供axis参数指定拼接方向 append: 默认先flatten再拼接成一维数组,也可指定axis stack: 提供axis参数,用于生成新的维度 hstack: 水平拼接,沿着行的方向,对列进行拼接 vstack...

2020-02-18 12:15:57 6177

原创 SQL基础入门

SQL语句种类 DDL——数据定义语言 CREATE:创建数据库和表等对象 DROP:删除数据库和表等对象 ALTER:修改数据库和表的结构 DML ——数据操纵语言 SELECT:查询 INSERTL:插入 UPDATE:更新 DELETE:删除 DCL——数据控制语言 COMMIT:确认对数据库中的数据进行的变更 ROLLBACK:取消数据库中的数据进行的变更 GRANT:赋予...

2020-02-17 00:09:26 249

空空如也

空空如也

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

TA关注的人

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