zoukankan      html  css  js  c++  java
  • 多线程

    线程6中状态:

    New(新生):用new操作符创建一个新线程

    Runnable(可运行):一旦调用start方法,线程处于该状态

    Blocked(被阻塞):当一个线程试图获取一个内部的对象锁,而改锁被其他线程持有,则该线程进入阻塞状态,当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。

    Waiting(等待):当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态(调用 Object.wait、Thread.join,等待java.util.concurrent库中的Lock或Contition)

    Time waiting(计时等待):这一状态将一直保持到超时期满或者接收到适当的通知

    Terminated(被终止):

    1、因为run方法正常退出而自然死亡

    2、因为一个没有捕获的异常终止了run方法而意外死亡

    线程优先级:1-10优先级从低到高,缺省为5

    守护线程:void setDaemo(boolean isDaemo) 该方法必须在线程启动之前调用

    yeild方法导致当前线程处于让步状态,让同等级或更高的线程执行

    Lock/Condition

    lock/unlock:发生阻塞。锁是可重入的,锁保持一个持有计数,一个锁保护的代码可以调用另一个使用相同的锁的方法

    条件对象:一个锁对象可以有一个或多个相关的条件对象,导致阻塞

    Lock lock = new ReentrantLock();        //构建一个可以被用来保护临界区的可重入锁

    Condition condition = lock.newCondition();  //返回一个与该锁相关的对象

    lock.lock();                  //获取这个锁,如果锁同时被另一个线程拥有则发送阻塞

    condition.await();                //将线程放到条件的等待集中

    condition.signAll();              //解除该条件的等待集中所有线程的阻塞状态

    condition.signal();               //从该条件的等待集中随机地选择一个线程,解除其阻塞状态

    lock.unlock();                  //释放这个锁

    每个对象都有一个内部锁,内部对象锁只有一个相关条件

    有锁来管理那些试图进入synchronzied方法的线程,有条件来管理那些调用wait的线程

    wait notifyAll notify方法是Object的final方法

    stop方法导致对象处于不一致的状态,破坏了对象

    suspend不会破坏对象

    阻塞队列,java.util.concurrent

    线程池:一个线程池包含许多准备运行的空闲线程,将Runnable对象交给线程池,就会有一个线程调用run方法,当run方法退出时,线程不会死亡,而是在池中准备下一个请求提供服务。线程池可以减少并发线程的数目

  • 相关阅读:
    20172301 2018-2019-1《程序设计与数据结构》课程总结
    20172301 哈夫曼树实验报告
    20172301 《Java软件结构与数据结构》实验三报告
    20172301 《程序设计与数据结构》第九周学习总结
    20172301 《Java软件结构与数据结构》实验二报告
    20172301 《程序设计与数据结构》第八周学习总结
    20172301 《程序设计与数据结构》第七周学习总结
    20172301 《程序设计与数据结构》第六周学习总结
    20172301 《程序设计与数据结构》课堂测试修改报告
    20172301 《程序设计与数据结构》第五周学习总结
  • 原文地址:https://www.cnblogs.com/QinH/p/4383654.html
Copyright © 2011-2022 走看看