![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
雪人奥特曼Q
这个作者很懒,什么都没留下…
展开
-
线程池提交任务的方式
Java中的线程池在进行任务提交时,有两种方式:execute和submit方法。一、execute和submit的区别execute只能提交Runnable类型的任务,无返回值。submit既可以提交Runnable类型的任务,也可以提交Callable类型的任务,会有一个类型为Future的返回值,但当任务类型为Runnable时,返回值为null。 execute在执行任务时,如果遇到异常会直接抛出,而submit不会直接抛出,只有在使用Future的get方法获取返回值时,才会抛出异常。原创 2021-05-28 11:04:18 · 1333 阅读 · 0 评论 -
互斥锁 Synchronized
使用锁来保护资源,首先需要确定锁和被保护资源的关系。为被保护资源R创建一把锁LR,然后再操作被保护资源R的时候对R进行加锁和解锁处理。java语言提供的所技术:synchronizedsynchronized关键字,是锁的一种实现,可以用来修饰方法,代码块。为了确保lock() 和 unlock() 的成对出现。synchronized中内置了lock() 和 unlo...原创 2020-05-17 16:02:31 · 374 阅读 · 0 评论 -
线程的阻塞
同步阻塞:原创 2020-04-28 18:18:18 · 411 阅读 · 0 评论 -
并发编程——按顺序打印(AtomicInteger类)
并发编程——AtomicInteger类原创 2020-08-20 23:44:12 · 286 阅读 · 0 评论 -
并发编程——交替打印-Semaphore类
Semaphore类:Semaphore 是一个计数信号量。常用于限制可以同时访问某些资源的线程数量,例如通过 Semaphore 限流。Semaphore中包含初始化时固定个数的许可,在进行操作的时候:需要先acquire获取到许可,才可以继续执行任务,如果获取失败,则进入阻塞; 处理完成之后需要release释放许可。acquire与release之间的关系:在实现中不包含真正的许可对象,并且Semaphore也不会将许可与线程关联起来,因此在一个线程中获得的许可可以在另一个线程中释放。原创 2020-08-20 23:43:46 · 296 阅读 · 0 评论 -
线程的创建方式
一、继承Thread类继承Thread类,重写run()方法,将所有完成的任务代码写进run()方法中; 创建子类的对象; 调用该对象的Strart()方法 start()和run()方法的区别二、实现Runnable接口三、通过Callable和Future创建线程四、使用线程池创建...原创 2020-04-28 18:17:59 · 165 阅读 · 0 评论 -
线程的wait和sleep方法的区别
wait:原创 2020-04-27 23:24:47 · 451 阅读 · 0 评论 -
线程的start方法和run方法的区别
run原创 2020-04-28 18:21:54 · 165 阅读 · 0 评论 -
并发编程——死锁问题
在 synchronized 互斥锁 中,对于 如何用一个锁 来保护 多个有关联的资源中,我们用 Account.class 作为锁,解决转账问题。是的A B账户没有并发问题。虽然这个方案解决了并发问题,但是 所有的账户 的转账操作都变成了串行的。例如 账户A转入B,账户C转入 D,在这个方案中只能串行执行,性能太差,而现实世界中这两个操作是可以并行的。所以我们可以采用细粒度锁,用不同的锁来保...原创 2020-07-14 23:54:38 · 568 阅读 · 0 评论 -
并发编程——原子性的解决办法
原子性的源头:线程切换 (因为线程间 对于 同一个变量的修改是不可见的,所以会影响数的准确性)操作系统的线程切换 依赖于 CPU中断,所以禁止 CPU 中断就能够禁止线程切换。该办法适用于单核时代,单核CPU的场景下,同一时刻只有一个线程在执行,禁止了CPU中断,意味着操作系统不会重新调度线程,也就禁止了线程切换;但在多核场景下,禁止线程切换,只能保证某个CPU上的线程可以连续执行,并不能保...原创 2020-07-03 10:57:34 · 148 阅读 · 0 评论 -
并发编程——可见性和有序性的解决办法
通过java内存模型来解决可见性和有序性问题。缓存和编译优化造成了可见性和有序性的问题。解决该问题的合理方案是提供一种方法可以让程序员可以按需禁用缓存和编译优化。java内存模式是一套规范,从程序员角度来看,java内存模型规范了JVM如何按需禁用缓存和编译优化的方法。这些方法,包括volatile,synchronized 和 final三个关键字,和六项happen-before原则。...原创 2020-05-17 15:47:06 · 248 阅读 · 0 评论 -
并发编程——bug的源头:可见性,原子性和有序性问题
CPU,内存和IO三者的速度差异很大,并且程序整体性能取决于最慢的操作—读写IO设备,为了平衡这三者的速度差异,从而更为合理的利用CPU的性能,从而提高程序性能,主要有一下三个方法: 1、CPU增加了缓存,以均衡与内存的速度差异; 2、操作系统增加了进程,以分时复用CPU,进而均衡CPU与IO设备的速度拆; 3、编译优化优化程序指令执行次序,使得缓...原创 2020-05-17 15:51:18 · 221 阅读 · 0 评论