- 博客(9)
- 收藏
- 关注
原创 Redis的数据类型 - string
Redis的数据类型 - stringstring 字符串string:最简单的字符串类型键值对缓存。关于keykeys *:查看所有的keytype key:key的类型stringget/set/del:查询/设置/删除set rekey data:设置已经存在的key,不会覆盖sentnx rekey data:设置已经存在的key,不会覆盖set key value ex time:设置带过期时间的数据expire key:设置过期时间ttl:查看剩余时间,-1永不过期,-2
2021-04-14 10:06:38
139
原创 并发编程(四)
等待/通知机制是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或者notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续操作。上述两个线程通过对象O来完成交互,而对象上的wait()和notify/notifyAll()的关系就如同开关信号一样,用来完成等待方和通知方之间的交互工作。notify():通知一个在对象上等待的线程,使其从wait方法返回,而返回的前提是该线程获取到了对象的锁,没有获得锁的线程重新进入W
2020-07-14 10:06:51
169
原创 并发编程(三)
ThreadLocal与Synchonized的比较ThreadLocal和Synchonized都用于解决多线程并发訪问。可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。Spring的事务就借助了ThreadLocal类。Spring会从数据库连接池中获得一个c
2020-07-14 09:50:15
189
原创 数据结构-二叉树
/*** 构建二叉树* @param inputList 输入序列* @return*/public static TreeNode crateBinaryTree(LinkedList inputList){TreeNode node = null;if (inputList == null || inputList.isEmpty()){return null;}Integer data = inputList.removeFirst();if (data != null){n
2020-07-14 08:59:17
129
原创 数据结构-队列
private int[] array;private int front;private int rear; public MyQueue(int capacity){ this.array = new int[capacity]; } /** * 入队 * @param element 入队的元素 */ public void enQueue(int element) throws Exception { if
2020-07-14 08:58:20
189
原创 数据结构-链表插入
//头节点指针private Node head;//尾节点指针private Node last;//链表实际长度private int size;/** * 链表插入元素 * @param data 插入元素 * @param index 插入位置 */public void insert(int data,int index){ if (index<0 || index>size){ throw new IndexOutOfBoundsExc
2020-07-14 08:56:36
399
原创 数据结构-数组插入
private int[] array;private int size;public MyArray(int capacity){ this.array = new int[capacity]; size = 0;}/** * 数组插入元素 * @param element 插入的元素 * @param index 插入的位置 */public void insert(int element,int index){ if(index<0 || index&
2020-07-14 08:55:15
798
原创 并发编程(二)
run()和start()Thread类是Java里对线程概念的抽象,可以这样理解:我们通过new Thread()其实只是new出一个Thread的实例,还没有操作系统中真正的线程挂起钩来。只有执行了start()方法后,才实现了真正意义上的启动线程。start()方法让一个线程进入就绪队列等待分配cpu,分到cpu后才调用实现的run()方法,start()方法不能重复调用,如果重复调用会抛出异常。而run方法是业务逻辑实现的地方,本质上和任意一个类的任意一个成员方法并没有任何区别,可以重复执行,
2020-07-13 21:01:36
131
原创 并发编程(一)
Java程序天生就是多线程的一个Java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上Java程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线程。[6] Monitor Ctrl-Break //监控Ctrl-Break中断信号的[5] Attach Listener //内存dump,线程dump,类信息统计,获取系统属性等[4] Signal Dispatcher // 分发处理发送给JVM信号的线程[3] Finalize
2020-07-13 20:30:12
173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅