
多线程
水月风情
这个作者很懒,什么都没留下…
展开
-
线程通信之生产者消费者阻塞队列版
package test;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;clas...原创 2019-10-12 10:48:15 · 334 阅读 · 0 评论 -
多个线程之间按顺序调用。实现A -> B -> C 三个线程打印A打印5次,B打印10次,C打印15次 重复10次
package test;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* 多个线程之间按顺序调用。实现A -> B -> C 三个线程打印 * A打印5...原创 2019-10-11 19:02:09 · 719 阅读 · 2 评论 -
对偏向锁的理解
偏向锁: 是为了在资源没有被其他线程竞争的情况下尽量减少锁带来的性能开销。在锁对象的对象头中有一个ThreadId字段,当第一个线程访问锁时,如果该锁没有被其他线程访问,即ThreadId字段为空,那么JVM让其持有偏向锁,并将ThreadId字段的值设置为该线程的ID。当下次获取锁时,会判断当前线程的ID是否与锁对象的ThreadID的值一致。如果一致,那么线程就不会再重复...原创 2019-05-04 19:28:03 · 3542 阅读 · 5 评论 -
多线程之Balking 模式
Balk有拒绝,阻碍的意思。如果现在不适合执行这个操作,或者没必要执行这个操作,就停止处理,直接返回。这就是Balking模式。Balking 模式可以和Guarded Suspension 模式对比,都存在守护条件。而在Balking模式中,如果守护条件不成立就立即中断处理,而Guarded Suspension 模式则是一直等待至可以运行。创建4个类名字 说明 Data...原创 2019-04-02 11:00:33 · 217 阅读 · 0 评论 -
多线程之Guarded Suspension 模式
Guarded 是被守护,被保护的意思,Suspension 是暂停的意思。如果执行现在的处理会造成问题,就让执行处理的线程进行等待。创建5个类名字 说明 Request 表示一个请求的类 RequestQueue 依次存放请求的类 ClientThread 发送请求的类 ServerThrad 接受请求的类 Main ...原创 2019-03-23 17:11:58 · 863 阅读 · 0 评论 -
多线程之Immutable 模式
创建三个类名字 说明 Person 表示人的类 Main 测试程序的类 PrintPersonThread 显示Person实例的线程的类 public class Main { public static void main(String[] args) { Person alice = new Person("Alic...原创 2019-03-23 14:45:55 · 204 阅读 · 0 评论 -
多线程之Single Threaded Execution 模式
创建三个类:类名 说明 Main 创建一个门,让三个人不断的通过门 Gate 表示门的类,穿过一个人时记录名字和出生地 UserThread 表示人的类。人们不断通过门 public class Main { public static void main(String[] args) { System.out.print...原创 2019-03-23 11:50:58 · 277 阅读 · 0 评论 -
ConcurrentLinkedDeque和ConcurrentLinkedQueue
看关键字Concurrent就知道这个两个类是并发类。ConcurrentLinkedQueue 是单向链表结构的无界并发队列。元素操作按照 FIFO (first-in-first-out 先入先出) 的顺序。适合“单生产,多消费”的场景。内存一致性遵循对ConcurrentLinkedQueue的插入操作先行发生于(happen-before)访问或移除操作。ConcurrentLin...原创 2019-03-19 14:27:34 · 5038 阅读 · 1 评论 -
Java锁的优缺点对比及适用场景总结
偏向锁:优点:加锁和解锁不需要额外的开销,和执行非同步方法相比仅存在纳秒级的差距。缺点:如果线程间存在锁竞争,会带来额外的锁撤销的消耗适用场景:适用于只有一个线程访问同步块场景轻量级锁:优点:竞争的线程不会阻塞,提高了程序的响应速度。缺点:如果始终得不到锁竞争的线程,使用自旋会消耗CPU适用场景:追求响应时间,同步块执行速度非常快重量级锁:优点:线程竞争不使用自...原创 2019-03-16 19:38:19 · 1921 阅读 · 0 评论 -
在多线程中不能自动注入Bean的解决方案
问题:项目启动后,Spring在发现线程类的时候,并不会帮线程类主动注入所需的bean(mapper接口和serviceImpl),所以你使用@Autowired注解也是没用的。解决办法:手动注入这里需要写一个手动注入bean的工具类:/** * @Description: 手动获取Spring中的bean 注意这个类要一定交给spring来管理,注册到spring的配置文件中...原创 2019-03-07 17:56:48 · 1891 阅读 · 1 评论 -
Java多线程之停止不了的线程
停止线程可以调用interrupt()方法,但是interrupt()方法的使用效果并不像for + break 语句那样,马上就停止循环。调用interrupt()方法仅仅是在当前线程中打了一个停止的标记。并不是真的停止线程。下面举个例子:public class MyThread extends Thread { @Override synchronized pub...原创 2018-12-23 22:54:21 · 961 阅读 · 1 评论 -
Java多线程基础之停止线程
JAVA中有3种终止正在运行的线程:使用退出标志,使线程正常的退出,也就是run方法运行完成后线程终止。 使用stop方式强行终止线程,但是不推荐使用这种方式,因为stop和suspend及resume一样,都是作废过期的方法,使用它们可能产生不可预料的后果。 使用interrupt方法中断线程 ...原创 2018-12-17 21:40:04 · 129 阅读 · 0 评论 -
Java多线程基础之数据共享引发的“非线程安全”
实例变量与线程安全 自定义线程类中的实例变量针对其他线程可以有共享与不共享之分,这在多个线程之间进行交互时是很重要的一个技术点。 一 、不共享数据的情况 public class MyThread extends Thread { private int count = 5 ; public MyThread(String name) ...原创 2018-12-15 22:12:13 · 149 阅读 · 0 评论 -
Java多线程基础之线程特性
核心知识:① 使用多线程技术时,代码的运行结果与代码执行的顺序或调用顺序是无关的public class MyThread extends Thread{ @Override public void run() { super.run(); System.out.println("MyThread"); }public class Test {...原创 2018-12-14 22:56:53 · 193 阅读 · 0 评论