1、锁的作用 Java中的锁主要用于保障多并发线程情况下数据的一致性。 在多线程编程中为了保障数据的一致性,通常需要在使用对象或者方法之前加锁,这时如果有其他线程也需要使用该对象或方法。则首先要获得锁,如果某个线程发现锁正在被其他线程使用,就会进入阻塞队列等待锁的释放,直到其他线程执行完成并释放锁, ...
分类:
编程语言 时间:
2020-07-07 00:15:49
阅读次数:
91
#leetcode复盘:19. 删除链表的倒数第N个节点 ##一、19. 删除链表的倒数第N个节点 方法一:两重遍历(链表的遍历和删除) (1)链表的遍历:利用临时节点一次遍历链表中的每一个节点,判断节点中的指针域是否为NULL,否则继续向后遍历;向后遍历过程为指向当前节点的指针,赋值为指向下一个节 ...
分类:
其他好文 时间:
2020-07-06 01:29:47
阅读次数:
64
PTA 02-线性结构2 一元多项式的乘法与加法运算 题目描述 设计函数分别求两个一元多项式的乘积与和。 输入格式 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式 输出分2行,分别以指数递降 ...
分类:
其他好文 时间:
2020-07-05 23:28:59
阅读次数:
116
#####共同点: 两者都可以暂停线程的执行. ####区别: 最主要的区别是 sleep() 没有释放锁, 而 wait() 释放了锁. wait() 常被用于线程间的交互和通讯, 而 sleep() 则通常被用于暂停执行. wait() 被调用后, 线程不会自动苏醒, 需要其他线程调用同一对象上 ...
分类:
其他好文 时间:
2020-07-05 23:28:10
阅读次数:
125
死锁原因 Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。即线程在获得了锁A并且没有释放的情况下去申请锁B,这时,另一个线程已经获得了锁B,在释放锁B之前又要先获得锁A,因此闭环发生,陷入死锁循环。 监控死锁 VisualVM监控工具有明显线程死锁提醒,也可监控到发生死锁的线程、类、代码 ...
分类:
编程语言 时间:
2020-07-05 17:44:12
阅读次数:
81
内部类 成员内部类 场景一:看到成员两个字,我们首先就想到了同样含有”成员“的成员变量,我们知道成员变量是定义在类中,所有方法(函数)之外的变量;那么成员内部类是否和成员变量处于相同的位置呢? 1)是的,成员内部类定义在一个类的里面(由此可以访问其外部类的私有属性),所有函数(方法)的外面。 2)p ...
分类:
其他好文 时间:
2020-07-05 15:49:58
阅读次数:
68
c语言中内存管理存在问题 静态内存分配: 局部变量 栈 全局变量 数据区 动态内存分配 堆 内存分配函数 malloc calloc realloc 内存释放 free 使用原则 用完了释放 问题1. 内存泄漏 ,用完了动态分配的内存就不释放,就产生内存泄漏 解决 :用完malloc 用free 问 ...
分类:
其他好文 时间:
2020-07-04 22:19:07
阅读次数:
72
TCP的四次挥手(Four-Way Wavehand) 1、“四次挥手”的详解 所谓的四次挥手即TCP连接的释放(解除)。连接的释放必须是一方主动释放,另一方被动释放。 以下为客户端主动发起释放连接的图解: 挥手之前主动释放连接的客户端结束ESTABLISHED阶段。随后开始“四次挥手”: (1)首 ...
分类:
其他好文 时间:
2020-07-04 19:16:29
阅读次数:
56
Semaphore信号量原理 Semaphore是一个计数信号量,本质是"共享锁". Semaphore维护一个信号量许可集. 线程可以调用acquire()获得信号量的许可. 线程可以调用release()释放其持有的信号量. 使用acquire()请求获得信号量时,若信号量有可用的许可时,线程获 ...
分类:
其他好文 时间:
2020-07-04 18:45:22
阅读次数:
80
首先来说下synchronize和Lock的区别: 两者都是锁,用来控制并发冲突,区别在于Lock是个接口,提供的功能更加丰富,除了这个外,他们还有如下区别: synchronize自动释放锁,而Lock必须手动释放,并且代码中出现异常会导致unlock代码不执行,所以Lock一般在Finally中 ...
分类:
其他好文 时间:
2020-07-04 17:07:38
阅读次数:
104