摘要: ##Java新建线程有哪几种方式 1、继承Thread类,重写run()方法,new一个实例对象,调用start()方法; 2、实现Runnable接口,重写run()方法,new一个实例对象,作为Thread的target来创建; 3、实现Callable接口 ##线程有哪些状态 初生、就绪、运行 阅读全文
posted @ 2021-11-04 10:11 GitHub-ahao 阅读(58) 评论(0) 推荐(0)
摘要: 使用ThreadPoolExecutor创建,不要使用Executors进行创建 ##3大方法、七大参数、4种拒绝策略 newSingleThreadExecutor() 创建单线程池 newCachedThreadPool() 创建可伸缩的线程池 newFixedThreadPool() 创建指定 阅读全文
posted @ 2021-11-03 20:34 GitHub-ahao 阅读(56) 评论(0) 推荐(0)
摘要: 进入同步方法后,判断不符合要求,进行wait等待。被唤醒后并没有重新进行判断,直接从等待处往下执行,导致数据异常。 解决方案:每次唤醒后重新判断。用while代替if synchronized (obj) { while () obj.wait(timeout); ... // Perform ac 阅读全文
posted @ 2021-11-03 12:30 GitHub-ahao 阅读(80) 评论(0) 推荐(0)
摘要: 1.7中使用segment分段锁,每段允许一个线程进行操作。 1.8中底层与HashMap类似。使用synchronized关键字,只锁当前链表或红黑树的首节点。 Hashtable使用全表锁,效率低下。 阅读全文
posted @ 2021-11-01 17:25 GitHub-ahao 阅读(33) 评论(0) 推荐(0)
摘要: HashMap底层是数组+链表+红黑树 链表长度大于8时会转化为红黑树(会进行一个判断,数组长度小于64时,会先扩容) 每次扩容长度翻倍,并且总是为2的幂。 使用扰动函数减少碰撞(有些hash函数并不优秀) 其中的threshold决定扩容的时机,默认的时0.75,及Hash Map中填充了75%就 阅读全文
posted @ 2021-11-01 17:14 GitHub-ahao 阅读(33) 评论(0) 推荐(0)
摘要: 也是非线程安全滴! 内有若干节点,每个节点中保存自己的值,有prev指向前一节点,next指向后一节点。 还有首节点,prev=null和尾节点next=null 阅读全文
posted @ 2021-11-01 16:31 GitHub-ahao 阅读(39) 评论(0) 推荐(0)
摘要: ArrayList底层是一个object数组,线程不安全,这是与Vector的区别。 简单来说,创建ArrayList的时候使用无参构造器会返回内部静态空数组,添加元素时进行第一次扩容,扩到10,之后按1.5倍扩容,直到1.5倍后大于Integer.MAX,比较原数组长度和Integer.MAX,原 阅读全文
posted @ 2021-11-01 16:06 GitHub-ahao 阅读(43) 评论(0) 推荐(0)
摘要: eureka: instance: prefer-ip-address: true配置优先使用ip注解另外新版本中eureka集成了ribbon,不必单独引入ribbon依赖,否则会报错 阅读全文
posted @ 2021-10-23 18:13 GitHub-ahao 阅读(35) 评论(0) 推荐(0)
摘要: 在并发环境下,加锁和解锁需要以下三个部件的协调: 锁状态。我们要知道锁是不是被别的线程占有了,这个就是 state 的作用,它为 0 的时候代表没有线程占有锁,可以去争抢这个锁,用 CAS 将 state 设为 1,如果 CAS 成功,说明抢到了锁,这样其他线程就抢不到了,如果锁重入的话,state 阅读全文
posted @ 2021-10-21 10:54 GitHub-ahao 阅读(30) 评论(0) 推荐(0)
摘要: ThreadLocal用于给各线程保存其特有的变量副本。每个线程都可以独立改变自己的副本,而不于其他线程的副本冲突。为多线程的并发访问提供了一种隔离机制。 变量值并非保存在ThreadLocal中,而是保存在各线程的私有变量ThreadLocal.ThreadLocalMap中,ThreadLoca 阅读全文
posted @ 2021-10-15 15:46 GitHub-ahao 阅读(33) 评论(0) 推荐(0)