并发编程学习
WeiLGHui
这个作者很懒,什么都没留下…
展开
-
线程池的使用
使用步骤: 1.使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool产生一个指定线程数量的线程池 2.创建一个类,实现Runnable接口,重写run方法,设置线程任务 3.调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行run方法 4.调用ExecutorService中的方法shutdown销毁线程池(不建议执...原创 2020-01-29 18:17:05 · 153 阅读 · 0 评论 -
线程池
什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。 线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能执行 提高现场的可管理性。线程是稀缺资源。如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,...原创 2019-05-08 17:27:24 · 98 阅读 · 0 评论 -
Lamabda表达式的学习
使用前提: 1.使用Lamabda必须要有接口,且要求接口中有且仅有一个抽象方法。(无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当借口中的抽象方法存在且唯一时,才可以使用Lamabda。) 2.使用Lamabda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lamabda对应的接口类型,才能使用Lamabda作为该接口的实例。 备注:有且仅有一个抽象...原创 2020-01-30 18:50:09 · 392 阅读 · 0 评论 -
多线程运行原理和线程安全问题解决
多线程运行原理: JVM执行Main方法,操作系统会开辟一道路径(即主线程)到CPU,但是在多线程的情况下,没启动一个线程,相当于开辟一条到CPU的路,CPU可以自己选择,因此,CPU的执行一般是无序的。 而在内存当中,当主方法开始执行时,主方法在栈中压栈执行,当调用start()方法后,会重新开辟一个空间,供新启动的线程使用 线程安全问题解决 以售票问题为例 问题:出现了重复票和不存...原创 2020-01-28 20:01:36 · 164 阅读 · 0 评论 -
java并发编程的艺术学习第一部分
1.当并发执行累加操作不超过100万次时,速度会比串行执行累加操作要慢,应为线程有创建和上下文切换的开销。 减少上下文切换的方法: **无锁并发编程:**多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据 **CAS算法:**Java的Atomic包使用的CAS算法来更新数据,而不需要加锁 **...原创 2019-10-19 19:48:53 · 115 阅读 · 0 评论