1.多线程
文章平均质量分 74
d
多学就会融会贯通
这个作者很懒,什么都没留下…
展开
-
多线程Future设计模式+异步处理
想实现异步发送邮件的功能,比如说,在客户成功提交了一个订单时,程序需要发送邮件给管理员和客户,然后报告说订单提交成功。如果不用异步方式,那么当邮件发送很耗时的时候,用户就要等很久才能看到成功提示,因此我想,在保存了订单数据后,就用另一个线程来发送邮件,从而当前线程立即就可以向用户反馈订单提交成功的提示信息。这个就像thread-per-message模式只不过有了futuredata可以用来存储结果 仍然是主线程立即结束返回响应 新启线程异步做委托的任务 主线程利用空闲时间去做其他事 多线程资源利原创 2021-04-28 14:26:56 · 352 阅读 · 0 评论 -
多线程技术!=异步效果!=高并发情况!=并发概念
多线程是一种技术同步/异步是一种想要达到的效果 他不止可以用多线程实现高并发是遇到的情况异步与多线程的区别同步正常结束 走到一半新起一个线程异步回调结果 多线程的Thread-per-Message模式就是这样达到了一个异步的效果我们用多线程技术 使用synchronized等锁 实现了同步的效果并发 并行https://blog.csdn.net/liuhuiteng/article/details/88371292并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同原创 2021-04-27 19:31:01 · 238 阅读 · 0 评论 -
多线程work thread模式+线程池demo模拟
设想在工厂里 有一个管道 客人将请求放到管道里 传递员工工作人员读取请求单 然后去工作 没请求时候就等着客人看不到工厂内部构造 他只看到了管道 什么都不知道在客户端没有 工作人员这个类 客户端看不到 只能看到管道说明管道帮助创建和启动了工作人员类 这很像threadpool多线程就是 有一个基础目标类/被操作类 里面的方法都是供线程使用的该类是命定当前多线程要完成什么业务 制定规则 他里面写上方法 写上调度所有的线程私有维护一个目标类实例 可以用构造函数初始化该实 以此达到所有线程共享原创 2021-04-27 16:45:05 · 389 阅读 · 1 评论 -
多线程thread-per-message设计模式+异步消息
感谢看了这篇书 我才终于懂了异步消息的概念现实场景:主任委托员工A去打印 委托员工B去买水 主任不关心他们返回的结果主任就接着做自己的事情了该模式又成为多线程下的代理模式 多线程下的适配器模式该模式需要以下几个角色:客户访问类代理类 Host 在客户端只创建一个host实例被代理类 Helperclass Client{ public static void main(String[] args) { System.out.println(Thre原创 2021-04-26 14:59:18 · 142 阅读 · 0 评论 -
多线程read-write lock模式
设想教师里 老师在黑板上写字 同学在下面读读+读 无需等待读+写 写等待读释放锁写+读 读等待写释放锁写+写 后来的等待总结:读都是共享的只要有写 就有互斥等待 谁是后来的 谁就等待该模式需要四个类共享资源类读类对比互斥独占,读时也只能一个一个线程读。该模式读锁可以共享数据资源 不用一个一个读 但是却因为逻辑过重未必比互斥独占来的快写类读写锁类该模式的读写锁 是程序员自己编写的一套逻辑锁(比如JUC) 对JAVA基层的物理锁进行封装 看似是两个锁 其实是两个逻辑锁在共用原创 2021-04-25 21:41:02 · 154 阅读 · 0 评论 -
小白进来学线程通信
wait notify的生产者创建者模式,在具体场景中怎么使用 如何创建类 并调用。需要下面这三个类管道类 (包含两个方法一个给生产者线程用 一个给消费者线程用 类中一定会有一个变量像flag一样 给这两个方法用来判断 作为守护模式的守护条件 )生产者线程类消费者线程类其实和正常的线程创建很像 只不过将目标类称为管道类 线程调用者被区分成两种线程类而已在学习生产者消费者模式之前先来学守护模式 简单来说就是只有一个wait 一个notify 单方面的唤醒守护模式注意wait和notify操原创 2021-04-21 14:20:42 · 100 阅读 · 1 评论 -
并发多线程银行取钱案例深入剖析
不要只读书 只看视频看完再背着打代码也不行在案例之前自己思考应该怎么打代码取钱的案例学了N遍 但你自己打不出来使用多线程会涉及三个角色操作对象线程类(包含run方法 线程业务所在)客户端(生成多个线程实例调用run方法 并且多个线程维护一个操作对象 这样达到多个线程共享资源 才会有线程之间的调度控制 对象锁互斥等)线程类是包含业务run方法的类 线程是线程实例调用start的之前没有这个清楚的认知 如果要我三个线程交替打印ABC我会创建三个线程类(三个run方法) 每一个线程类维护原创 2021-04-19 12:19:03 · 400 阅读 · 0 评论 -
NIO随笔记录
http://www.52im.net/thread-2640-1-1.html学习2学习3这里是引用举个生活中简单的例子,你妈妈让你烧水,小时候你比较笨啊,在哪里傻等着水开(同步阻塞)。等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞)。后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,你需要去倒水了(异步非阻塞)。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提原创 2021-01-22 15:02:14 · 91 阅读 · 0 评论 -
2020-10-09
scJava并发编程:Callable、Future和FutureTask原创 2020-10-09 18:29:22 · 56 阅读 · 0 评论 -
ThreadLocal入门
为提高效率我们经常使用多线程来进行并发操作 有时候会涉及到并发对共享资源进行操作 我们会进行同步使用synchronized或者juc下的原子类型修饰实例变量但仍然是几个线程对同一实例变量进行操作 现在希望每一个线程可以有自己私有的变量通常采用 static ThreadLocal 来存储每一个线程的局部变量(变量随着线程的生命周期创建而创建 消失而消失) 使用threadlocal.set来存储每一个线程的私有变量 threadlocal.get来获取每一个线程的私有变量1、threadlocal.原创 2020-10-01 19:23:12 · 197 阅读 · 0 评论 -
【并发】volatile关键字面试整理
volatile变量的特性?volatile变量的内存语义?volatile指令重排序的特点?volatile内存语义是怎么实现的?原创 2020-06-29 16:23:30 · 321 阅读 · 1 评论 -
什么是线程安全?
了解线程安全 首先了解什么叫临界区临界区 竞争条件对于5000次的i++ i–结果不是0原因是因为在jvm底层的字节码流程是先获得这个i 然后再增加 再写回 **刚增加完还没有写回就已经被另一个线程取走了** i++背后有多步 某一步骤就会被另一个线程抢夺 加上sychornized确保当前这个i++的临界区完成了 在别的线程进代码块被称为临界区 :对其中的共享资源有读写操作i++ jvm指令读取i 将i增加sychronized枷锁之后流程:获得对象锁 其他对象请求获得对象锁 但原创 2020-06-29 13:50:42 · 166 阅读 · 0 评论 -
死锁产生和避免及计算题
产生死锁的必要条件:1.互斥从资源层面来看: 两个线程不能同时占有 互斥2.不剥夺/不可抢占从俩线程之间来看: 总是等待另一个线程执行完 不抢夺正在占用资源的线程3.请求与保持自己占有着资源还不放手 一直等着别人的资源4.循环等待总结 好记:东西少 不抢 还客气 还不着急。如何处理死锁?1.打破互斥允许线程 同时访问某些资源2.打破不剥夺如果资源已经被线程占据了,允许进程强行从占有者那里夺取某些资源3.打破请求与保持进程在运行前申请得到所有的资源,否则该进程不能进入准备执行状态原创 2020-06-29 13:16:47 · 5669 阅读 · 1 评论 -
Thread常用方法
stop实现类写一个标志位和一个停止函数private boolean flag=true;public void stop(){this.flag=false; }执行线程的run方法可以被标志位控制是不是继续运行public void run(){while(flag){ ...... }}stop()是当前类的函数 停止的时候是当前类在调用stop 不是线程对象sleep会有一个InterruptedException e异常直接在其他的类常常直接调用.原创 2020-06-29 11:27:45 · 347 阅读 · 0 评论 -
创建线程的4种方式
默认线程:守护线程 jc用户线程 main函数线程创建继承Thread(Thread本身实现Runnable接口)1.继承Thread 2.重写run() 3.子类对象调用start方法测试方法 主线程和run的线程在交替打印 public void run() { for (int i = 0; i < 100; i++) { ...原创 2020-04-28 22:27:53 · 174 阅读 · 0 评论 -
线程状态之java6种 操作系统5种
操作系统线程的5种状态新建 就绪 执行 阻塞 死亡java中的6种状态1.创建 2. 执行 3.销毁 4.时间限制的等待 5.无线等待 6.阻塞常见线程方法使用 的状态切换当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入可运行状态。当前线程时间片用完了,调用当前线程的yield()方法,当前线程进入可运行状态。锁池里的线程拿到对象锁后,进入可运行状态。startstart只能运行1次 就绪状态即原创 2020-06-28 21:09:16 · 429 阅读 · 0 评论 -
【并发】synchronized面试整理
线程同步方法都有哪些互斥和同步的关系互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法控制对资源的访问顺序同步是指在互斥的基础上实现对资源的有序访问Synchronized底层原理 ,应用方法和代码块底层原理的细节不同定义:synchronized 实际是用对象锁保证了临界区内代码的原子性,临界区内的代码对外是不可分割的,不会被线程切换所打断。引出底层Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现方法同步原创 2020-05-27 20:07:05 · 669 阅读 · 0 评论 -
线程和进程的区别与联系
进程:资源分配的基本单位线程:CPU可以调度的最小单位同步:异步:创建线程的三种方法:前两种都是实现THREAD类exthends Thread 是继承:任务(run)和线程在一起implements Runnable是实现:将任务和线程分开 使用静态代理 我们修改任务 而不是线程 另外推荐优先使用组合 而不是继承方式1:Runnable runnable=new Runnable{public void run(){}};Thread t=new Thread(runnable原创 2020-05-25 22:52:57 · 381 阅读 · 0 评论 -
线程安全的单例模式
单例模式的构造器是私有的 声明变量是私有的 只有返回是公开的为了保证线程安全:我们的类是final的做到方法不被子类覆盖 导致多个线程同时访问类中的变量为了保证线程安全都用static 因为类加载的时候初始化静态变量 jvm对于类加载阶段是线程安全的多个线程去访问一个方法的时候记得加锁懒汉模式的volatile为什么不全部同步 如果已经有了对象就不用进入临界区这样性能高过每一次都加锁为什么多一次判断 为了避免第一次创建对象的时候t2进入创建重复在执行反编译的过程当中发现很多时候我们去方.原创 2020-05-27 15:28:12 · 185 阅读 · 0 评论