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

深入浅出Java多线程

Arthur JAVA开发工程师
难度入门
时长 4小时 0分
  • 1:线程的互斥是指,在同一时间关键数据只能有一个线程访问<br> 2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码 3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后通知另一个线程可以进行下面的事情了 4:线程同的实现有wait(),notify(),notifyall()这几个方法来实现,这几个方法都是属于object类,并不是thread类 5:学习过操作系统相关的内容,这一部分的内容还是比较容易理解的,主要是线程的特点和CPU的特点导致出现了一些不太容易控制的现象或者讲,如果想避免掉这些不好的现象发生,我们应该采取什么样的措施,线程的同步和互斥就是一种方式,好比:好多人在火车站上测试所一样,每个人都是一个线程,火车站是进程,厕所是CPU,一次只能一个人上厕所,多个人要上厕所时怎么办?如果控制不好肯定要打架的,所以需要排队上厕所,厕所门类似与线程锁,一个人上完了通知另一个人类似于线程通信
    查看全部
  • 1:线程的特点,共享同一进程的资源,同一时刻只能有一个线程占用CPU<br> 2:由于线程有如上的特点,所以,就会存在多个线程争抢资源的现象,就会存在争用条件这种现象<br> 3:为了让线程能够正确的运行,不破坏共享的数据,所以,就产生了同步和互斥的两种线程运行的机制<br> 4:线程的互斥指:线程的运行隔离开来,互不影响,使用synchronized关键字实现互斥行为,此关键字即可以出现在方法体之上也可以出现在方法体内,以一种块的形式出现,在此代码块中有线程的等待和唤醒动作,用于支持线程的同步控制<br> 5:线程的同步指:线程的运行有相互的通信控制,运行完一个在正确的运行另一个
    查看全部
  • 1:线程的特点是共享进程的资源,内存的存储空间,但是CPU在某一时刻只能供一个线程占用,由于存在这样的情况,所以,线程的运行有一些比较难控制的地方,当多个线程都想占用CPU的时候就需要来一场决斗决定那一个线程占用CPU了,否则线程世界就混乱了,当然,处理的方式有好多种,和我们人类世界一样,弱肉强食,分成三六九等依次占用,或者先到先得 2:争用条件指:当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏的现象,这是应该避免的事情,所以,就产生了线程世界中的优先级的各种算法,比如:先到先得、优先级、轮询等等。
    查看全部
  • Thread常用方法
    查看全部
  • Thread类中可以直接调用getName()方法,而Runnable没有这个方法,所以需要用Thread.currentThread.getName()。
    查看全部
  • 线程Thread的方法说明
    查看全部
  • done
    查看全部
  • java线程学习
    查看全部
    0 采集 收起 来源:慕课感言

    2016-02-14

  • 线程常用方法
    查看全部
  • thread常用方法
    查看全部
  • Java线程——线程交互——扩展建议 1、Java Memory Mode:JMM描述了java线程如何通过内存进行交互,了解happens-before,synchronized,voliatile & final 2、Locks % Condition:锁机制和等待条件的高层实现 java.util,concurrent.locks 3、线程安全性:原子性与可见性,死锁等 4、多线程常用的交互模型 · Producer-Consumer模型 · Read-Write Lock模型 · Future模型 · Worker Thread模型 5、Java5中并发编程工具:java.util.concurrent 线程池ExcutorService Callable&Future BlockingQueue 6、推荐书本:CoreJava & JavaConcurrency In Practice 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
    0 采集 收起 来源:总结及展望

    2018-03-22

  • 深入剖析互斥与同步 互斥的实现:synchronized(lockObj);java的语法保证的同一时间,只有一个线程获得lockObj 同步:wait(),notify(),notifyall(),都是属于object类,并不是thread类 wait set 类似于线程的休息室,访问共享数据的代码称为critical section。一个线程获取锁,然后进入临界区 ,发现某些天骄不满足,然后调用锁对象上的wait方法,然后线程释放掉锁资源,进入锁对象上的wait set。其他线程可以获取所资源,然后执行,完了以后调用notify,通知锁对象上的等待线程。 Ps:若调用notify();则随机拿出(这随机拿出是内部的算法,无需了解)一条在等待的资源进行准备进入Critical Section;若调用notifyAll();则全部取出进行准备进入Critical Section。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java线程——线程交互——互斥与同步 private final Object lockObj = new Object(); /** * 能量的转移,从一个盒子到另一个盒子 * @param from 能量源 * @param to 能量终点 * @param amount 能量值 */ public void transfer(int from, int to, double amount){ synchronized(lockObj){ // if (energyBoxes[from] < amount) // return; //while循环,保证条件不满足时任务都会被条件阻挡,而不是继续竞争CPU资源 while (energyBoxes[from] < amount){ try { //条件不满足, 将当前线程放入Wait Set lockObj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } ... //唤醒所有在lockObj对象上等待的线程 lockObj.notifyAll(); } } 一、互斥 1、同一时间,只能有一个线程访问数据 二、同步 1、是一种通信机制,一个线程操作完成后,以某种方式通知其他线程 三、实现方法 1、【互斥】构建锁对象(Object objLock),通过synchronized(lockObj){ 互斥的代码块 } 2、加锁操作会开销系统资源,降低效率。 3、在某线程的条件不满足任务时,使用lockObj.wait()对线程进行阻挡,防止其继续竞争CPU资源,滞留在wait set中,等待唤醒,【唤醒后继续完成业务】 4、【同步】在某一代码正确执行完业务后,通过lockObj.notifyAll()唤醒所有在lockObj对象等待的线程 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java线程——线程交互——争用条件 1、当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏(corrupted),这种现象称为争用条件 2、原因是,每个线程在操作数据时,会先将数据初值读【取到自己获得的内存中】,然后在内存中进行运算后,重新赋值到数据。 3、争用条件:线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问该数据,然后进行了修改,之后被阻塞的线程1再获得资源,而将之前计算的值覆盖掉线程2所修改的值,就出现了数据丢失情况 Ps:syso...printf();//格式输出,其中%n相当于换行。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 广为流传的错误方法---interrupt方法 while(!this.isInterrupt()){//实质上还是做标记 syso..."Thread is running..."; long time=System.currentTimeMillis(); while(System.currentTimeMillis()-time<1000){ //减少屏幕输出的空循环 } } //效果相当于Thread.sleep(1000);为何不使用sleep?interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程。 Ps:一个线程在阻塞状态下(例如sleep),此时interrupt的话,将会产生两个结果: 1、进程的interrupt状态被清除(cleard)而非被设置(set)。 2、sleep方法会抛出异常。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部

举报

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

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