Java多线程
文章平均质量分 90
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。
这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内
冷锋-
只要现在努力一切都来得及,最近暂停更
展开
-
Java Future与CompletableFuture的用法、区别
Future的用法多线程场景时,一般是实现runnable接口,覆写run方法,返回值是void类型,因此这种情况下不需要线程的返回结果。如果需要线程的返回结果,就需要用callable接口来代替了。callable用法和runnable一样,只不过覆写的是call方法,该方法有一个泛型返回值类型,可以根据需要指定。那么何时到Future呢?当你启动callable线程时,就可以声明一个Future对象,用于接收返回结果。Futrue可以监视目标线程调用call的情况,当你调用Future的...原创 2021-08-27 12:07:14 · 1048 阅读 · 0 评论 -
深入理解线程池--ThreadPoolExcutor
线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的。ThreadPoolExecutor提供了四个构造函数,最后都会归结于下面这个构造方法:// 七个参数的构造函数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTi...转载 2020-09-25 16:07:07 · 952 阅读 · 0 评论 -
Synchronized,Lock底层解析
概述 在JDK1.5之前,使用synchronized来实现线程同步的,同步的开销较大效率较低,因此在JDK1.5之后,推出了代码层面的Lock接口(synchronized为jvm层面)来实现与synchronized同样功能的同步锁功能。 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock,其...转载 2020-03-19 18:51:31 · 334 阅读 · 0 评论 -
Java多线程并发编程实践总结
前言学过Java并发编程的小伙伴们,在实际编程中,需要考虑以下点:1.使用本地变量2.使用不可变量类3.最小化锁的作用范围4.使用线程池,而不是直接使用new thread进行,通常创建一个线程是昂贵的。5.宁可使用同步也不要使用线程的wait和notify6.使用BlockingQueue实现生产-消费者模式7.使用并发集合,而不使用同步的集合8.使用sema...原创 2019-08-19 23:19:59 · 1403 阅读 · 0 评论 -
Thread.yield()详解
(1)首先介绍线程运行状态转换,如下图: 新建状态(New):新创建了一个线程对象。 就绪状态(可执行状态,Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。 运行状态(运行状态,Running):就绪状态的线程获取了CPU,执行程序代码。 阻塞状态(Blocke...原创 2020-01-15 22:54:43 · 16675 阅读 · 1 评论 -
Java 比较StringBuilder和Stringbuffer 线程安全性
直接上代码:1.StringBufferpackage com.thread;import javax.annotation.concurrent.ThreadSafe;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util....原创 2019-08-01 16:00:09 · 638 阅读 · 0 评论 -
深入理解Synchronized--对象锁、类锁(看完这篇就够了)
Java 并发编程-锁-synchronized1.简介synchronized是java提供的一种内置的锁机制。通过synchronized关键字同步代码块。线程在进入同步代码块之前会自动获得锁,并在退出同步代码块时自动释放锁。内置锁是一种互斥锁。2.使用场景修饰代码块:大括号括起来的代码,作用于调用的对象。修饰方法:整个方法,作用于调用的对象。修饰静态方法:整个静态方法...原创 2019-07-25 15:31:47 · 957 阅读 · 0 评论 -
Java并发 多线程实现计数功能(线程安全)
在上篇,我们利用线程池,信号量,倒计时相关类实现计数的功能,但运行结果总不能达到目标,我们将做以下改进。1.首先附上源码,红色标注,是我们此次修改的地方import javax.annotation.concurrent.ThreadSafe;import java.util.concurrent.CountDownLatch;import java.util.concurrent....原创 2019-07-24 16:25:59 · 4472 阅读 · 0 评论 -
Java并发 多线程实现计数功能(线程不安全)
首先介绍实现改功能的相关名词:Semaphore,CountDownLatch ,newCachedThreadPool 1.Semaphore 一个计数信号量。顾名思义,一个信号量拥有一定数量的许可证,一个线程acquire需要申请到许可证才能获取锁,否则阻塞等待;释放的时候会返还许可证给阻塞的线程申请。 2.CountDownLatch...原创 2019-07-24 15:29:34 · 1319 阅读 · 0 评论 -
高并发之应用限流思路
概述高并发场景下,爆炸性大量的对数据库的请求操作不仅会占用十分高比例的网络带宽,导致其他应用对数据库的请求受阻,还会导致从库与主库的延迟大大增加,降低了从库数据的不准确率,也降低了缓存的命中率。如下图:限流方式一般开发高并发系统常见的限流有:限制总并发数、限制瞬时并发数、限制时间窗口内的平均速率;其他还有如限制远程接口调用速率、限制MQ的消费速率。另外还可以根据网络连接数、...原创 2019-09-20 15:09:13 · 216 阅读 · 0 评论 -
CPU多级缓存-缓存一致性
前言:为什么需要CPU cache?因为:由于cpu频率太快,在处理器时钟周期内,cpu常常要等待主存,浪费资源,所以cache的出现,主要解决缓解cpu和主存之间速度不匹配的问题。1.首先介绍一下操作系统高速缓存的配置数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道;主存与高速缓存都连在系统总线上(BUS)这条总线同时还用于其他组件的通信。由于系统变得复杂...原创 2019-07-17 17:13:13 · 563 阅读 · 0 评论