JavaCode
不止码农~~~~
(本人很懒~~~没有留下什么。。。)不做搬运工。。
展开
-
JAVA枚举类和CountDownLatch的应用!!
枚举类:相当于一个“小型数据库”。CountDownLatch:是一个非常实用的多线程控制工具类。类中主要的方法:countDown() // 计数减一。await() //等待,当计数减到0时,所有线程并行执行。小DEMO:public class CountDownLatchDemo { public static void main(String[] args) t...原创 2019-08-02 17:12:44 · 138 阅读 · 0 评论 -
合理配置线程池,corePoolSize的合理设置
如何配置线程池中的线程数(corePoolSize):分为两种:依据:根据机器的硬件:**System.out.println(Runtime.getRuntime().availableProcessors());**查看自己机器的CPU核心数。1.cpu密集型:CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。CPU密集任务只有在真正的多核CPU才可能得到加速(通...原创 2019-08-06 17:00:06 · 17520 阅读 · 4 评论 -
说说线程池的底层工作原理?
1.在创建了线程池后,等待提交过来的任务请求。2.在调用execute()方法添加一个请求任务是,线程池会做如下判断:2.1 如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务;2.2 如果正在运行的线程数量大于或等于corePoolSize,那么将这个任务放入队列;...原创 2019-08-06 16:32:36 · 471 阅读 · 0 评论 -
JDK内置的拒绝策略
1.AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统正常运行。2.CallerRunsPolicy:“调用者运行”一种调节机制,该策略既不会抛弃任务,也不会抛出异常,而是将某些任务回退到调用者,从而降低新任务的流量。3.DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务。...原创 2019-08-06 16:18:00 · 483 阅读 · 0 评论 -
线程池七大参数介绍!手写线程池
1.corePoolSize:线程池中的常驻核心线程数。(1).在创建了线程池后,当有请求任务来了之后,就会安排池中线程去执行请求任务,近似理解为今日当值线程。(2). 在线程池中的线程数目达到corePoolSize后,就会把后续到达的任务放到缓存队列中。2.maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值必须大于等于1。3.keepAliveTime:多余的空闲...原创 2019-08-04 22:45:48 · 852 阅读 · 0 评论 -
Java中线程池:为什么用线程池?它的优势是什么?线程池如何使用?常用的3中线程池详解。线程池小Demo
线程池作用:线程池的工作主要是控制运行线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。特点:线程复用;控制最大并发数;管理线程。优势:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建...原创 2019-08-04 20:46:09 · 586 阅读 · 0 评论 -
线程通信:生产者消费者阻塞队列版
class MyResource{ private volatile boolean FLAG = true;//默认开启,进行生产+消费 private AtomicInteger atomicInteger = new AtomicInteger(); BlockingQueue<String> blockingQueue = null; pu...原创 2019-08-03 18:17:44 · 202 阅读 · 0 评论 -
synchronized和Lock有什么区别?用新的Lock有什么好处?多线程之间按顺序调用,实现A->B->C三个线程启动,要求如下: AA打印5次,BB打印10次,CC打印15次,循环10次
**区别:**1.原始构成:synchronized: synchronized是Java关键字,属于JVM层面。(monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法)也依赖于monitor对象只有在同步块或方法中才能调wait/notify等方法。)Lock: 是具体类(java.util.concurrent.locks.Lock)是api...原创 2019-08-03 15:47:38 · 602 阅读 · 0 评论 -
阻塞队列(BlockingQueue)图解,以及实现类的简述
阻塞队列:顾名思义,首先他是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示相当于“生产者和消费者问题”。当阻塞队列是空时:从队列中获取元素的操作将会被阻塞。当阻塞队列是满时:往队列里添加元素的操作将会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他线程往空队列插入新的元素。同样,试图往已满的阻塞队列添加新元素的线程同样也会被阻塞,直到其他的线程从列中移除一个或多...原创 2019-08-03 12:00:48 · 1053 阅读 · 0 评论 -
Semaphore的简介和小Demo
Semaphore:翻译为:信号量。主要有两个目的:一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。相当于日常生活中的“抢车位”。常用方法:acquire(),从此信号量获取一个许可。release(int permits):释放给定数目的许可,将其返回到信号量。小Demo:public class SemaphoreDemo { public static voi...原创 2019-08-03 08:30:27 · 174 阅读 · 0 评论 -
JAVA中CyclicBarrier的使用,以及小Demo
**CyclicBarrier:**字面意思是“可循环使用的屏障”。它的作用是:让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法。小Demo:public class CyclicBarrierDemo { public static void m...原创 2019-08-02 17:40:15 · 660 阅读 · 0 评论 -
什么是死锁?产生死锁的主要原因?死锁的编码及定位分析。死锁的小Demo。
1.什么是死锁:死锁是指两个或两个以上的进程在执行进程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。2.产生死锁的主要原因:2.1 系统资源不足2.2 进程运行推进的顺序不合适2.3 资源分配不当死锁demo演示,以及死锁分析排查!!...原创 2019-08-06 17:51:24 · 968 阅读 · 0 评论