- 博客(20)
- 收藏
- 关注
原创 操作系统的特征
一共有四个:并发,共享,虚拟,异步并发说起并发不得不一起说一下并行,因为他们概念总是容易混淆,其实也还好,我一贯的主张是用生活中的case来理解,假设天猫双11有超多的人在很短的时间内,几乎可以看成同一时刻来访问天猫的主页进行抢购,这可以看成并发,而并行就是你一边喝水一遍玩手机。这个例子来自尚硅谷周阳,我觉得超级好,完全不用记概念。如果用王道学长给出的概念,并发是指两个或多个事件在同一时间间隔内发生,这些事件宏观是同时发生(0点同时抢购),但在微观上却有先后顺序,而操作系统中的并发可以理解为在单机计算机
2020-10-08 16:07:15
160
原创 java死锁Demo和死锁检测
import java.util.concurrent.TimeUnit;/** * @author Jing * @date 2020/10/6 0006 17:37 */public class DieLockDemo { public static void main(String[] args) { String a = "a"; String b = "b"; Source2 source2 = new Source2(a, b)
2020-10-07 10:59:58
229
原创 创建多线程的第三四种方式
Callablepublic class CallableDemo { public static void main(String[] args) { System.out.println(Runtime.getRuntime().availableProcessors()); }}class a implements Callable<String> { @Override public String call() throws Ex
2020-10-06 18:10:04
138
原创 各种锁问题
公平/不公平就像队列不能插队,根据线程的某一些顺序。非公平可以有人加塞。可能会引起饥饿或者优先级反转的现象。LOCK包可以设置,而syn是非公平锁。可重入锁,其实也叫递归锁。可以避免死锁,就我来感觉,比如两个同步方法,都是this.对象 都是同一个锁,可以重新进去。你说避免死锁,但之前的例子也是a调用B,B调用A 但是是两个不同的类,...
2020-10-06 10:55:31
181
原创 阻塞队列
工作中需要面对:阻塞队列首先他得是一个队列,他取线程只能从一边取,放线程得从另一个边取。当队列空的时候,取线程的一边就会阻塞。当队列满的时候,放线程的一边就会阻塞。为什么需要阻塞队列?因为在多线程中,有些情况线程需要阻塞,也就是被挂起,而又有些情况我们需要唤醒我们阻塞的队列。而阻塞队列的存在使我们不用关系线程什么时候需要阻塞线程,什么时候需要唤醒线程。这一切都被阻塞队列包办了。在juc包发布以前需要程序要去控制这些细节,尤其需要兼顾效率和线程安全。架构:阻塞队列直接继承了Collection结
2020-10-05 18:01:28
142
原创 ccs
首先第一个countDownLatch。这个就类似火箭发射倒计时654321只有到1才可以发射,或者举一个生活中的case就是比如一个教室有6个同学一个班长,班长管着锁门的任务,只有六个同学都走完之后班长才可以锁门。如果这七个人每个人都是一个线程, 那么只有六个线程执行完操作之后第七个线程才能执行任务。看一个秦一统天下的代码。import java.util.Objects;import java.util.concurrent.CountDownLatch;/** * @author Jin
2020-10-05 15:41:11
139
原创 自旋锁,读写锁
利用while循环,不断尝试,而不是放弃cpu执行权,class My { private AtomicReference<Thread> atomicReference = new AtomicReference<>(); public void myLock() { Thread thread = Thread.currentThread(); while (!atomicReference.compareAndSet(nul.
2020-10-04 16:36:10
282
1
原创 不安全的集合类
线程安全的listimport java.util.*;import java.util.concurrent.CopyOnWriteArrayList;/** * @author Jing * @date 2020/9/30 0030 17:15 * 集合的不安全Case */public class CollUnsafe { public static void main(String[] args) { // 不安全演示 Vector<S
2020-10-03 17:29:24
113
原创 volatile
volatile是一种轻量级的线程同步机制 他主要有三个特性保证可见性,import java.util.concurrent.TimeUnit;/** * 验证volatile关键字可以保证可见性 */class ShareDate { volatile int num = 1; public void setNum(){ num = 50; }}public class TestVol { public static void main
2020-09-30 17:15:11
163
原创 用Lock实现精确唤醒
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 用Lock来实现精准唤醒 */class ShareDate { private int num = 1; // 1A 2B 3C private Lock lock = new ReentrantLock(
2020-09-28 18:13:45
364
原创 Syn和Lock的区别
Syn是关键字属于JVM的层面,底层是通过moniterenter 和moniterexec命令来完成的,Lock是java的一个类,是api层面的锁并且syn有两个退出命令来保证异常之后会有退出,不需要手动释放锁。Lock是try catch finlly 手动释放。Syn不可以被中断。除非抛出异常或者正常运行结束。Lock可以被中断。设置超时方法,trylocksyn非公平锁lock默认非公平syn 只能随机唤醒一个或者全部唤醒lock 可以绑定事件来精准唤醒...
2020-09-28 17:05:29
2601
原创 两个线程交替打印1 0 syn实现
/** * 两个线程交替打印1 0 * 虚假唤醒不是说不运行了 而是会出现错误数据 */class ShareDate { private Integer num = 0; synchronized void add() throws InterruptedException { while (num != 0) { // 判断 wait(); } // 干活 num++
2020-09-28 16:51:22
255
原创 两个线程交替打印1 0
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 两个线程交替打印1 0 * 虚假唤醒不是说不运行了 而是会出现错误数据 */class ShareDate { private Integer num = 0; private Lock lock = ne
2020-09-28 16:40:51
341
原创 redis1
redisc 强一致性 比如考勤a 可用性 双11p 分区容错性只能三选二ca 传统oraclecp redisap 大多数项目 保证网站不崩 p必须要 因为网站都是分布式的base 基本可用 软状态 最终一致分布式 不同服务器 不同服务 集群 不同服务器 相同服务redis 支持 持久化 数据类型多 redis 支持备份select 切换数据库dbsize 找所有的key 数量exeixst 判断存在keys * 当前库所有keymove key db 移动数
2020-06-15 20:12:35
103
原创 java2
serial parnew 并行serial old cms 并行G1string ,字符串不可变性指的是因为它是finally所以不能被赋予新值。要想修改,就要建新的,即在方法区的常量池中,只能有一份,相同字符串,就是因为他是finally在这里插入图片描述string buffer 和stringbuilder 和string 三者的异同string 不可变 不对之前数组做修改 使用char型的数组string buffer 长度可变 线程安全 加了syn
2020-06-08 18:28:26
181
原创 java1
volatile 有两个特性,一个是保证内存的可见性,一个是禁止指令的重派列。读写锁是 volatile + readwritelockvolatile + unsafe + atomicInterger 解决了并发不一致的问题,unsafe类的cas方法保证原子。 但是会出现aba问题。用atomicStampReference解决ABA。syn 和 reenterlock 可以从公平非公平 可重入来讨论并发的list copyonwritearraylist 用了 reenterlock 加v
2020-06-08 16:48:04
101
原创 1.数据库三范式。
1.数据库三范式。(1)一范式:每一个字段都对应着一条数据,这就叫一范式。举个例子:下面的图上半部分就不是一范式,因为出现了表中套表的情况,需要把它拆分成图的下半部分,每个字段单独占一个属性。 (2)二范式:若消除了非主属性对主键的部分函数依赖,那么它就符合二范式的要求。举个例子: 看上面这个图,可以把它理解为一张学生表s,他有s(学生id),sname(学生姓名),age(年龄),addr(住址),c...
2020-05-18 15:53:39
190
原创 git常用命令
状态查看操作 git status添加操作git add [file name] 添加到缓存区提交操作 git commit -m "message" [file name] 添加到本地库查看日志 git log漂亮的查看日志 git log --pretty=oneline ; git log --oneline ; git reflog索引前进后退 git reset...
2020-04-30 19:27:45
126
原创 java内排序Demo
java内排序Demopackage BDTest;import com.sun.org.apache.regexp.internal.RE;import java.util.Arrays;import java.util.concurrent.ForkJoinPool;/** * @author jing * @create 2020-03-30-17:49 */publ...
2020-03-30 21:34:44
244
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人