- 博客(13)
- 收藏
- 关注
原创 冒泡...
int[] cs = {1,4,3,8,10,2,9}; //冒泡 for(int i = 0;i<cs.length -1;i++) { for(int j=0;j<cs.length-1-i;j++) { if(cs[j]>cs[j+1]) { int tep = cs[j]; cs[j]=cs[j+1]; cs[j+1]=tep; } } } System.out.println(Arrays.toSt
2021-11-19 11:58:27 93
原创 最优单例模式Singletion
public class Singletion { private Singletion() { }; private static volatile Singletion instance; public static Singletion getInstance() { if(instance==null) { synchronized(Singletion.class) { if(instance==null) { instance= new Singletio
2021-11-17 23:02:00 132
原创 linux--vim基本用法
个人理解vim有2种模式,一种通俗的可编辑模式即插入模式,一种非直接编辑模式即命令模式 1、当输入vim xxx 后进入的是命令模式,该模式下不可编辑,可以进行一些查找复制工作。 :wq 保存修改并退出 :w 将缓冲区写入文件,即保存修改 :q! 强制退出,放弃修改 :q 退出,如果对缓冲区进行过修改,则会提示 yy 复制当前行 nyy 复制从光标开始下面n行 p 粘贴到当前行上面 P 粘贴到当前行下面 u 撤销 dd 删除光标所在行 查找替换 /xx
2021-11-17 21:57:07 210
原创 java-多线程
拿qq比喻,进程就是一启动qq,qq本身所占用的资源进程,打开win资源管理器,看到的程序都是进程,而多个qq同时登陆就是多进程, 多线程就是打开一个qq后开启多个窗口和不同的人聊天,线程是属于进程的。 java是一种解释性语言,其所运行的程序都是在jvm中运行的,当启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程。jvm虚拟机的启动多线程的。 因为垃圾回收线程也要先启动,否则很容易会出现内存溢出。现在的垃圾回收线程加上主线程,最低启动了两个线程,所以,jvm的启动
2021-11-17 21:55:44 261
原创 HashMap----浅谈
1.结构分析: 从JDK1.8开始,使用 数组+链表/红黑树。 当链表长度>8的&数组大小>=64 时转化为红黑树。 当红黑树节点小于6,转换为链表 2.数据插入流程 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n,
2021-11-17 21:45:45 61
原创 多线程下如何操作ArrayList,Set
1.ArrayList //不安全的写法 ,会报出 ConcurrentModificationException,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 public static void main(String[] args) { List<String> list = new ArrayList(); for (int i = 0;i<10;i++){ new Thread(()->{
2021-11-17 21:42:35 272
原创 多线程下的Map操作
1.不安全的操作,容易报ConcurrentModificationException Map<String, String> map = new HashMap<>(); for (int i = 0;i<10;i++){ new Thread(()->{ map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().su
2021-11-17 21:39:50 2057
原创 LOCK 与Syschronized 差异
1.从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。synchronized是java中的一个关键字,也就是说是Java语言内置的特性。 2.synchronized对象在获取锁后,其他线程只能等待,无法同时进行读操作,影响程序执行效率。lock锁住对象时,当一个线程在进行读操作时,其他线程可以进行读操作。 3.synchronized不需要用户去手动释放锁,执行完后系统会自动让线程释放对锁的占用。Lock则必须要用户去手动释放
2021-11-17 21:38:06 475
原创 ReadWriteLock-读写锁
摘自api文档 1.A ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写入。 read lock可以由多个阅读器线程同时进行,只要没有作者。 write lock是独家的。 先上代码 public static void main(String[] args) { ReadWriteLockTep readWriteLockTep = new ReadWriteLockTep(); for(int i = 0;i<5
2021-11-17 21:36:16 121
原创 Semaphore-一个计数信号量
1.在概念上,信号量维持一组许可证。 如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它。 每个release()添加许可证,潜在地释放阻塞获取方。 但是,没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。 2.信号量通常用于限制线程数,而不是访问某些(物理或逻辑)资源。 //Semaphore主要用于限流 // 在获得项目之前,每个线程必须从信号量获取许可证,以确保某个项目可用。 当线程完成该项目后,它将返回到池中,
2021-11-17 20:59:04 67
原创 CountDownLatch(减法计数器)-CyclicBarrier(加法计数器)
1.CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。 public CountDownLatch(int count)构造一个以给定计数 CountDownLatch CountDownLatch。 参数 count -的次数 countDown()必须调用之前线程可以通过 await() 异常 IllegalArgumentException - 如果 count为负数 public void countDown() 减少锁存器的计数,如果计数达到零,释放
2021-11-17 20:56:38 346
原创 学习笔记(02):spring boot 入门到实战-6.一种springboot的异常统一处理的方法
springboot是springcloud的基础入门课程,也是springcloud的知识。 现免费开放给大家学习,如果你想学好springcloud,请认真学好这几节基础课。 ----课件资料--------- 请加QQ群:274033905(群名:《springcloud实战》),免费获取课件资料哦...
2020-02-01 13:10:36 123
原创 学习笔记(01):spring boot 入门到实战-5.分析spring boot的核心注解
springboot是springcloud的基础入门课程,也是springcloud的知识。 现免费开放给大家学习,如果你想学好springcloud,请认真学好这几节基础课。 ----课件资料--------- 请加QQ群:274033905(群名:《springcloud实战》),免费获取课件资料哦...
2020-02-01 13:03:45 116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人