`
sharp-fcc
  • 浏览: 110794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Thread 状态详解

阅读更多

原文:http://www.cnblogs.com/DreamSea/archive/2012/01/11/JavaThread.html



 不废话直接上图:

1)优先级(priority)

每个类都有自己的优先级,一般property用1-10的整数表示,默认优先级是5,优先级最高是10;优先级高的线程并不一定比优先级低的线程执行的机会高,只是执行的机率高;默认一个线程的优先级和创建他的线程优先级相同;

2)Thread.sleep()/sleep(long millis)

当前线程睡眠/millis的时间(millis指定睡眠时间是其最小的不执行时间,因为sleep(millis)休眠到达后,无法保证会被JVM立即调度);sleep()是一个静态方法(static method) ,所以他不会停止其他的线程也处于休眠状态;线程sleep()时不会失去拥有的对象锁。 作用:保持对象锁,让出CPU,调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留一定的时间给其他线程执行的机会;

3)Thread.yield()

  让出CPU的使用权,给其他线程执行机会、让同等优先权的线程运行(但并不保证当前线程会被JVM再次调度、使该线程重新进入Running状态),如果没有同等优先权的线程,那么yield()方法将不会起作用。

4)thread.join()

 使用该方法的线程会在此之间执行完毕后再往下继续执行。

5)object.wait()

  当一个线程执行到wait()方法时,他就进入到一个和该对象相关的等待池(Waiting Pool)中,同时失去了对象的机锁—暂时的,wait后还要返还对象锁。当前线程必须拥有当前对象的锁,如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常,所以wait()必须在synchronized block中调用。

6)object.notify()/notifyAll()

  唤醒在当前对象等待池中等待的第一个线程/所有线程。notify()/notifyAll()也必须拥有相同对象锁,否则也会抛出IllegalMonitorStateException异常。

7)Synchronizing Block

 Synchronized Block/方法控制对类成员变量的访问;Java中的每一个对象都有唯一的一个内置的锁,每个Synchronized Block/方法只有持有调用该方法被锁定对象的锁才可以访问,否则所属线程阻塞;机锁具有独占性、一旦被一个Thread持有,其他的Thread就不能再拥有(不能访问其他同步方法),方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

 

  • 大小: 251.7 KB
分享到:
评论

相关推荐

    线程的5种状态详解.doc

    ### 线程的五种状态详解 #### 一、新建状态(NEW) - **定义**:当通过 `new` 关键字创建了一个线程对象时,该线程处于新建状态。 - **特点**: - 线程对象已创建,但尚未启动。 - 此时线程不会占用任何 CPU ...

    C# 多线程详解Thread

    ### C#多线程详解:Thread #### 一、多线程的概念与优势 多线程是现代操作系统中实现高效程序执行的关键技术之一。在Windows这样的多任务操作系统中,一个程序运行时通常会以进程的形式存在,而一个进程中又包含了...

    详解C++ thread用法总结

    C++中的thread类是C++11标准引入的,用于在C++程序中创建和管理线程。它被定义在<thread>头文件中,是C++标准库的一部分。通过使用std::thread类,程序员可以创建新的线程来执行特定的任务,从而实现程序的多线程...

    ThreadX内核用户手册,含SMP多核(中文版)新.rar

    ThreadX对中断服务进行了精细管理,中断发生时,系统会保存当前线程的状态,然后切换到中断处理程序。中断完成后,系统恢复先前的状态,继续执行被中断的线程。这种机制保证了中断的快速响应,同时也维护了实时系统...

    MFC的状态 模块状态、进程状态、线程状态。

    ### MFC的状态模块状态、进程状态、线程状态详解 #### 9.1 模块状态 MFC中的模块状态是指一个可执行程序或使用MFCDLL的动态链接库(DLL)的状态信息。例如,一个OLE控件可以视为一个模块。每个应用程序的模块都有...

    Java多线程详解

    以上是对"Java多线程详解"主题的详细阐述,涵盖了Java多线程的基本概念、实现方式、线程控制、线程池、并发集合、线程间通信以及并发编程中常见的问题和解决方案。学习和熟练掌握这些内容对于开发高效的多线程Java...

    Java线程详解大全

    线程的生命周期包括四个主要状态:创建状态、可运行状态、不可运行状态和消亡状态。创建状态是在使用`new`操作符创建线程对象时,此时线程仅是一个空对象,系统还未为其分配资源。调用`start()`方法后,线程进入可...

    java多线程详解

    4. **阻塞状态**:线程可能因为各种原因被阻塞,比如等待I/O操作完成、等待其他线程释放锁或调用`Thread.sleep()`等。 5. **终止状态**:线程执行完毕或因异常终止时,进入终止状态。 #### 四、线程同步与互斥:...

    JAVA多线程编程详解

    ### JAVA多线程编程详解 #### 一、深入理解多线程 多线程机制是现代编程语言中处理并发操作的关键技术之一,尤其在Java中,多线程提供了高效的资源利用方式,允许程序中多个指令流同时运行,提高程序执行效率。每...

    05 看若兄弟,实如父子—Thread和Runnable详解.pdf

    `start()`方法的注释提供了更深入的洞察,它提到`start()`方法会检查线程状态,确保线程未启动,然后将线程加入到线程组,最后调用`start0()`。如果`start0()`成功,线程将被启动,否则,如果线程无法启动,将会抛出...

    android网络开发与应用实战详解源码

    Android提供了AsyncTask、Handler、Thread和Service等机制来实现多线程。书中将介绍如何使用这些工具来避免ANR(Application Not Responding)错误。 5. 数据缓存:为了提高用户体验,网络数据的本地缓存是必要的。...

    RT-thread 学习资料大全

    学习资料还可能包含调试技巧和性能优化的方法,如使用GDB进行远程调试、分析工具rt_thread_dump分析系统状态,以及如何通过调整参数提高系统响应速度和资源利用率。 总之,这个“RT-thread 学习资料大全”是学习和...

    threadx user guide

    《ThreadX嵌入式操作系统详解》 一、ThreadX概览与核心特性 ThreadX是一款高性能的嵌入式实时操作系统(RTOS),由Express Logic公司开发并拥有。它旨在为嵌入式系统提供高效的多任务处理能力,适用于各种硬件平台...

    VC++深入详解(完整版)+所有源代码集

    VC++提供了创建和管理线程的API,如CreateThread和JoinThread,以及同步机制,如临界区、互斥量和信号量。 6. **异常处理**:C++的异常处理机制是一种处理程序错误的方式,它允许在出现异常情况时中断正常流程,转...

    Java中多线原理详解.doc

    5. **死亡状态**:当线程的`run()`方法执行完毕或调用了`Thread.stop()`方法后,线程进入死亡状态。一旦线程死亡,就不能再次启动。 理解线程的状态对于管理多线程应用程序至关重要。例如,可以通过控制线程的阻塞...

    java多线程编程详解

    `Thread.State`枚举类定义了这些状态,可以通过`Thread.getState()`获取当前线程状态。 4. **线程同步**: - **synchronized关键字**:用于控制多线程对共享资源的访问,确保同一时间只有一个线程可以执行特定代码...

    rtthread的at组件在freeRTOS上的移植修改代码

    《RTThread AT组件在FreeRTOS上的移植与修改详解》 在嵌入式系统开发中,RTThread是一款广泛应用的实时操作系统,而FreeRTOS则是另一款轻量级、高效的实时操作系统。两者都有各自的优点,而在实际项目中,有时我们...

Global site tag (gtag.js) - Google Analytics