![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 80
卷王中王
一个啥也不会的小学生.
展开
-
JAVA多线程学习------线程池原理
1.堵塞队列package com.xjq.ThreadPool;import java.util.ArrayDeque;import java.util.Deque;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/*任务堵塞队列 */public class Bl...原创 2020-10-22 08:44:30 · 95 阅读 · 0 评论 -
JAVA多线程学习--------多线程中的模式
1. 定义 即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者) JDK 中,join 的实现、Future 的实现,采用的就是此模式 因为要等待另一方的结果,因此归类到同步模式2.实现2.1 简单保护暂停模式package com.xjq.ThreadDemo;/*原创 2020-10-22 08:46:07 · 128 阅读 · 0 评论 -
JAVA多线程学习------ReentrantLock学习
1.ReentrantLock与synchronized对比相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 与 synchronized 一样,都支持可重入 基本语法: lock.lock(); try { }finally { lock.unlock(); }2.可重入package c原创 2020-10-22 08:46:36 · 100 阅读 · 0 评论 -
Java多线程学习-------两阶段终止模式
1.Interrupt方式实现注意:sleep(),wait(),join()方法被interrupt()方法打断之后,isInterrupted()会被重新赋值为false。正常执行的线程如果被interrupt()方法打断,isinterrupted()返回值为true。代码实现:public class TwoStageTermination { public Thread monitor; public void start() { monitor = n原创 2020-10-22 08:47:42 · 109 阅读 · 0 评论 -
JAVA多线程学习------CAS和乐观锁
1.CAS操作引入:利用CAS改写取款程序。class Accoumt{ private AtomicInteger balance; public int getBalance() { return balance.get(); } public Accoumt(int balance){ this.balance = new AtomicInteger(balance); } public void wit原创 2020-10-22 08:45:35 · 90 阅读 · 0 评论 -
JAVA多线程学习-------monitor所实现原理
1.Java对象头Java对象头详解2.monitor锁原理Monitor 被翻译为监视器或管程 每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针Monitor 结构如下!同步监视器对象obj首先会向操作系统申请获取一个monitor,获取到之后会把obj对象头中的mark word中的lock字段由01改为10,并且把前30位改为monitor地址。原创 2020-10-22 08:47:11 · 708 阅读 · 1 评论 -
CAS原子类型
1. AtomicInteger public static void main(String[] args) { AtomicInteger ai = new AtomicInteger(); //默认值为0 AtomicInteger ai1 = new AtomicInteger(2); //默认值为2 int i = ai.get();//获取最新值 ai.incrementAndGet(); //i++ a原创 2021-04-05 20:45:01 · 113 阅读 · 0 评论 -
Java学习---------多线程总结
1.多线程的创建1.1 方式一:继承Thread类创建流程:①首先创建一个类继承Thread类。②在子类中重写run()方法。③创建子类的实例对象。④调用子类对象的start()方法。注意一个对象的start方法只能调用一次,再次调用不会启动新的线程,反而会报错。想要的在启动一次线程,就必须在新建一个对象。class MyThread01 extends Thread{ @Override public void run() { for (int i = 0;原创 2020-09-28 10:42:56 · 122 阅读 · 0 评论 -
多线程常用类
1. Callable使用方法:public class CallableDemo { public static void main(String[] args) { CallableTest callableTest = new CallableTest(); FutureTask<Integer> futureTask = new FutureTask(callableTest); new Thread(futureT原创 2021-04-03 17:48:04 · 466 阅读 · 0 评论 -
并发编程-----------集合
1. 多线程下的List方式一:使用线程安全的Vector类。 方式二:通过Collections.synchronizedList(List<T> list) 把List结合转换为线程安全的类。 方式三:使用CopyOnWriteArrayList区别:前两种方式都是通过synchronized的同步方式,这种方式是粗粒度的锁,读写时都需要获取锁,效率很低。方式三通过cow写时复制的策略。在读取的时候不会进行加锁。在写入时,首先获取lock锁,然后创建了原容器的副本,写入通过对副本原创 2021-04-03 17:04:09 · 84 阅读 · 0 评论