很多次面试都遇到了一个问题: 线程有那几个状态?
OK, 线程到底有哪几个状态?
看代码可知: 5个状态, NEW, RUNNABLE, RUNNING, TERMINATE, BLOCKED, WAITING, TIMED_WAITING
public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE, /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchronized block/method or * reenter a synchronized block/method after calling * {@link Object#wait() Object.wait}. */ BLOCKED, /** * Thread state for a waiting thread. * A thread is in the waiting state due to calling one of the * following methods: * <ul> * <li>{@link Object#wait() Object.wait} with no timeout</li> * <li>{@link #join() Thread.join} with no timeout</li> * <li>{@link LockSupport#park() LockSupport.park}</li> * </ul> * * <p>A thread in the waiting state is waiting for another thread to * perform a particular action. * * For example, a thread that has called <tt>Object.wait()</tt> * on an object is waiting for another thread to call * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on * that object. A thread that has called <tt>Thread.join()</tt> * is waiting for a specified thread to terminate. */ WAITING, /** * Thread state for a waiting thread with a specified waiting time. * A thread is in the timed waiting state due to calling one of * the following methods with a specified positive waiting time: * <ul> * <li>{@link #sleep Thread.sleep}</li> * <li>{@link Object#wait(long) Object.wait} with timeout</li> * <li>{@link #join(long) Thread.join} with timeout</li> * <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li> * <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li> * </ul> */ TIMED_WAITING, /** * Thread state for a terminated thread. * The thread has completed execution. */ TERMINATED; }
状态实例见代码
public class TestJava { private final static Object lock = new Object(); public static void main(String[] args) throws InterruptedException { Thread t = new Thread(){ public void run(){ System.out.println("RUNNING: " + this.getState()); synchronized(lock){ try { Thread.sleep(3000); lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } }; System.out.println("NOT START:" + t.getState()); t.start(); while (true){ Thread.sleep(2000); System.out.println("WAITING:" + t.getState()); synchronized (lock){ System.out.println("MONITOR LOCK:" + t.getState()); lock.notify(); System.out.println("AFTER NOTIFY: " + t.getState()); } Thread.sleep(10000); } } }
状态转换图:
相关推荐
2. **线程API精讲** - "07 深入Thread类—线程API精讲-慕课专栏.html":此部分深入解析了`Thread`类的API,如`start()`, `join()`, `sleep()`, `yield()`等方法,以及线程状态的转换。 3. **Executor框架** - "20 ...
Java编写的海贼王漫画爬虫是一个用于自动化抓取网络上公开漫画资源的程序,尤其针对没有设置反爬策略的网站。在这个项目中,我们主要会涉及到以下几个关键的知识点: 1. **网络爬虫基础**:网络爬虫是通过模拟...
书中可能包含大量图表、漫画和游戏,帮助你以轻松的方式掌握Java知识。 总之,《深入浅出Java》将引导你一步步探索这个强大而广泛的语言,无论你是初学者还是有经验的开发者,都能从中受益。通过学习,你将能够编写...
本文将深入探讨这一主题,基于Java并发编程学习宝典(漫画版)的内容,我们将理解wait和notify的概念,同步的重要性,以及如何正确使用它们。 1. wait/notify 概念 wait()和notify()是Java并发编程中非常重要的两个...
- 讲述网络编程和并发处理的基本原理,包括TCP/IP协议、Socket编程以及Java中的线程模型。 #### 16. **数据结构:集合和泛型** - 解释了Java集合框架,包括List、Set、Map等集合类的使用,以及泛型的引入如何增强...
Java Swing或JavaFX库提供了丰富的组件(如JButton、JLabel等)来创建图形用户界面,用于显示棋盘、接收用户输入并更新棋盘状态。 在源码中,你可能会看到多线程的应用,特别是在实现玩家轮流操作时。Java的Thread...
此外,通过大量的图解、漫画和互动练习,使抽象的概念变得直观易懂,让学习过程更加生动有趣。 总的来说,《Head First Java 中文高清版》是一本全面且深入的Java入门教材,无论你是编程新手还是想转战Java的开发者...
6. **多线程**:考虑到网吧计费系统需要实时更新用户状态,可能使用了多线程技术,如 SwingWorker,确保在用户操作期间界面仍然保持响应。 7. **异常处理**:在系统开发中,异常处理是必不可少的,它确保程序在遇到...
4. **健康检查与Actuator**:提供了一组端点用于监控和管理应用,例如查看应用状态、内存信息、线程信息等。 5. **运行时日志和Banner**:默认的日志框架是Logback,可以方便地进行日志级别调整。同时,启动时会...
《Java并发编程学习宝典(漫画版)》中提到的23章主要讲解了Java并发编程中的一个重要概念——ReadWriteLock,即读写锁。ReadWriteLock是`java.util.concurrent.locks`包下的一个接口,它是对传统互斥锁的一个扩展,...
开发者需要熟悉 Java 核心概念、面向对象编程、异常处理、线程管理以及网络编程等技术。此外,了解 Java ME(Mobile Edition)对于 BlackBerry 开发尤为重要,因为它针对移动设备进行了优化。 ### 4. UI 设计与用户...
《漫威复仇者联盟游戏模拟》是一款以著名漫画与电影系列——漫威复仇者联盟为背景的游戏项目。在这个模拟游戏中,玩家可以扮演复仇者联盟中的角色,体验原汁原味的剧情,完成任务,与其他超级英雄并肩作战,保卫地球...
在IT行业中,日志系统是软件开发中的重要组成部分,它能帮助开发者追踪程序运行状态、定位问题和优化性能。腾讯XLog就是一个专为Android平台设计的日志打印工具,旨在提供高效、安全的日志记录功能。本文将深入探讨...
7. **日志记录**:为了调试和监控爬虫的运行状态,项目可能使用了日志记录框架,如Log4j或java.util.logging,它们可以帮助开发者追踪程序的执行流程,记录错误信息。 8. **异常处理**:在处理网络请求和文件操作时...
游戏后端可能需要处理复杂的逻辑,比如玩家状态同步、排行榜更新、游戏事件处理等。服务器可能使用多线程或者异步编程模型来处理并发请求,确保高效响应。 在"ComicAtomic-master"这个压缩包中,我们可以预期找到的...
Objective-C通过发送消息来调用对象的方法,这与C++或Java中的函数调用有所不同。例如,`[anObject doSomething:]` 是向anObject发送一个doSomething消息。消息传递是Objective-C的精髓,它提供了高度的灵活性和动态...
`src`目录,包含了应用的Java源代码,其中的Activity、Service、BroadcastReceiver等组件构成了应用的核心功能。 在hitme_a5源码中,我们可能发现以下几个关键概念: 1. **Activity生命周期**:在hitme_a5中,...
1. **单例模式**:在Java或任何面向对象的语言中,单例模式是一种确保一个类只有一个实例并提供全局访问点的设计模式。它常用于控制共享资源,如数据库连接池。书中通过“饿汉式”和“懒汉式”两种实现方式来解释...
在这个过程中,可以使用Intent传递数据,或者采用ViewModel和LiveData进行数据共享,确保界面状态的保存和恢复。 总的来说,"HandlerThreadMarvelApiApp"项目展示了如何在Android应用中有效地使用HandlerThread进行...
阅读TXT时,偶尔出现“java.lang.RuntimeException: IOException character”的BUG将在下次修正,目前在自测 一些问题由于无法重现,请大家反馈一下: 1、使用ANYVIEW删除文件时,程序会报错强行退出(NOKIA 6131) 2、...