为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
深入浅出Java多线程_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

深入浅出Java多线程

Arthur JAVA开发工程师
难度入门
时长 4小时 0分
  • 多线程争用条件问题-Race Condition
    查看全部
  • 1.如何创建线程及线程的基本操作 2.可见性及volatile关键字 3.争用条件 4.线程的互斥---Synchronized 5.线程的同步---wait/notifyAll 1.借鉴JMM了解java线程图和通过内存进行交互 【happens-before】 2.Locks & Condition 3.线程安全性 4.死锁 常用交互模型 1.生产消费者模型(Producer-Consumer) 2.读写模型(Read-Write Lock) 3.Future模型 4.Worker Thread模型
    查看全部
    0 采集 收起 来源:总结及展望

    2018-03-22

  • Wait Set概念(线程休息室) 共享资源(Critical Section)---- 临界区 [当访问共享资源时,先要获得锁,然后进行操作,判断是否符合要求,不满足则调用锁的wait()方法,然后进入锁的Wait Set]
    查看全部
  • 如何进行互斥? 增加锁对象——lockObj synchronized(lockObj){ 关键代码 } 如何实现同步? 锁对象.wait(); 锁对象.notify(); 锁对象.notifyAll(); 这3个方法都是属于Object对象 是该对象的成员函数,而非Thread, 构成了同步。 注意: wait()和notifyall()不是在同一个线程的同一次操作中进行的,而是在不同的线程中执行。 同步是两个线程之间的交互,一个发出操作,一个响应操作。
    查看全部
  • 三个类
    查看全部
  • Thread常用方法
    查看全部
  • Thread,Runnable,run
    查看全部
  • 进程...
    查看全部
  • 注:必须将keepRunning变量声明为volatile 使用volatile变量降低了发生内存一致性错误的风险, 因为任何对volatile变量的写操作都与对该变量的读操作建立了happens-before关系。这种关系意味着对volatile变量值的改变对其他线程总是可见的。更近一步, 当一个线程读取volatile变量的时候,该线程不但读取了最近的变化,而且是导致该变化发生代码的全部影响
    查看全部
  • 不正确的停止线程方法: stop方法——会导致戛然而止 interrupt(终断)、interrupted、Isinterrupted 一个线程因为调用某些方法【join、sleep方法】而被阻塞的情况下,interrupt方法会是中断状态被清除。会收到一个IterruptedException异常。 如何正确的停止JAVA的线程? 类名.keepRunning = false;
    查看全部
  • 互斥的实现:synchronized(lockObj);java的语法保证在同一时间,只有一个线程获得lockObj。 同步:wait(),notify(),notifyall(),都是属于object类的方法,而不是thread类。 wait set 类似于线程的休息室,访问的共享数据代码所在的临界区域称为critical section。一个线程获取锁,然后进入临界区进行操作,当发现某些条件不满足时,便会调用锁对象上的wait方法,然后线程释放掉锁资源,进入锁对象上的wait set区域等待。其他线程就可以再去竞争获取锁资源,然后执行,完了以后调用notify,唤醒锁对象上的等待线程。 Ps:若调用notify();则随机唤醒(这随机唤醒是底层算法自行实现,我们无法控制)一条在等待的线程准备进入Critical Section;若调用notifyAll();则唤醒全部在等待的线程准备竞争锁以便进入Critical Section。
    查看全部
  • Java线程——线程交互——互斥与同步 一、互斥 1、同一时间,只能有一个线程访问数据 二、同步 1、是一种通信机制,一个线程操作完成后,以某种方式通知其他线程 三、实现方法 1、【互斥】构建锁对象(Object objLock),通过synchronized(lockObj){ 互斥的代码块 } 2、加锁操作会开销系统资源,降低效率。 3、在某线程的条件不满足任务时,使用lockObj.wait()对线程进行阻挡,防止其继续竞争CPU资源,滞留在wait set中,等待唤醒,【唤醒后继续完成业务】 4、【同步】在某一代码正确执行完业务后,通过lockObj.notifyAll()唤醒所有在lockObj对象等待的线程
    查看全部
  • Java线程——线程交互——争用条件 1、当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏(corrupted),这种现象称为争用条件 2、原因是,每个线程在操作数据时,会先将数据初值读【取到自己获得的内存中】,然后在内存中进行运算后,重新赋值到数据。 3、争用条件:线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问该数据,然后进行了修改,之后被阻塞的线程1再获得资源,而将之前计算的值覆盖掉线程2所修改的值,就出现了数据丢失情况
    查看全部
  • 格式输出方式 %d表示输出一个整数值 %10.2f表示一个浮点值 10表示小数点前是10位,2表示小数点后为2位 %n等于/n,即空格换行
    查看全部
  • Thread() :创建线程。 void start() :线程的创建 static void sleep() :使线程进入休眠(可以精确到纳秒) void join() :调用线程,使其它线程进入等待,直到调用的线程结束。 static void yield () :当前运行的线程释放处理器资源。 currentThread(): 返回当前运行的线程的引用。
    查看全部

举报

0/150
提交
取消
课程须知
本课程的学习,需要小伙伴们具有面向对象基础知识及 Java 语言基础。如果您是新手,建议先移步 《Java入门第一季》和《Java入门第二季》
老师告诉你能学到什么?
1、Java 中如何使用线程 2、什么是争用条件 3、线程如何交互
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!