zoukankan      html  css  js  c++  java
  • 有关线程的说法?

    一、线程机制

    二、线程同步

    三、线程通信

    四、线程安全性

         一、问题: 出现了线程安全问题 ?

         二、问题的原因:
           当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。

         三、出现线程安全问题的根本原因:
          1、存在两个或者两个以上的线程对象,而且线程之间共享着一个资源。
          2、有多个语句操作了共享资源。

          四、解决办法:
          1、对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。
          2、线程安全问题的解决方案:sun提供了线程同步机制让我们解决这类问题的。

    五、线程占用内存

    六、线程状态

    1.新建

    new语句创建的线程对象处于新建状态,此时它和其他java对象一样,仅被分配了内存。

    2.等待

    当线程在new之后,并且在调用start方法前,线程处于等待状态。

    3.就绪

    当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态。处于这个状态的线程位于Java虚拟机的可运行池中,等待cpu的使用权。

    4.运行状态

    处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。

    只有处于就绪状态的线程才有机会转到运行状态。

    5.阻塞状态

    阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才会有机会获得运行状态。

    阻塞状态分为三种:

    1、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

    2、同步阻塞:运行的线程在获取对象同步锁时,若该同步锁被别的线程占用,则JVM会把线程放入锁池中。

    3、其他阻塞:运行的线程执行Sleep()方法,或者发出I/O请求时,JVM会把线程设为阻塞状态。当Sleep()状态超时、或者I/O处理完毕时,线程重新转入就绪状态。

    6.死亡状态

    当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。 

  • 相关阅读:
    iOS objc_msgSend 报错解决方案
    不再以讹传讹,GET和POST的真正区别
    HTTP Get请求URL最大长度
    [转]浅论ViewController的加载 -- 解决 viewDidLoad 被提前加载的问题(pushViewController 前执行)
    ASIHTTPRequest-断点续传需要原网站支持!
    iOS关于error can't allocate region的一点发现
    Xcode 5.1.1 与 Xcode 6.0.1 的共存之路(建议大家在升级Xcode 6.0.1 的时候保留Xcode 5.1.1)
    监测uitableview 向上滑动和向下滑动的事件
    Xcode5和6共存时,如何发布应用到商店
    利用MPMoviePlayerViewController 播放视频 iOS
  • 原文地址:https://www.cnblogs.com/boniu666/p/9703530.html
Copyright © 2011-2022 走看看