多线程——状态转换
线程可以分为4个状态:
New(新生),
Runnable(可运行):为了方便分析,还可将其分为:Runnable与Running。
blocked(被阻塞),
Dead(死亡)。
1,新生线程:
当你用new操作符创建一个线程时,例如用new Thread(r),线程还没有开始运行,此时线程处于新生状态;在线程运行之前,还有一些簿记工作要做。
2,可运行线程:
(a)Runnable:一旦调用了start方法,就进入到Runnable状态。
(b)Running:在到Runnable后,线程就有可能已经进入到了运行状态;根据操作系统所提供的服务,在抢占式调度的系统中,系统给每个运行的线程一个时间片来处理任务,而这个时间片用完后,操作系统将剥夺该线程的资源。这样,在Runnable与Running之间是可以相互转换的。所以从大的分类,这两个是可以合并的。
3,被阻塞线程:
(1),当线程通过调用sleep方法进入睡眠状态时。(类似的方法有yield(),join(),这些方法的使用在后面章节介绍)
(2),当线程通过调用wait方法时,进入阻塞。
(3),当线程调用的对象,试图得到这个对象的锁,而该锁已经被其他线程持有。
(4),等待I/O操作。
(5),还有已经过时的suspend方法。
而从被阻塞状态到可运行状态。
(1),sleep睡眠时间已过。
(2),在调用wai方法后,又通过notify或notifyAll方法唤醒。
(3),对象锁已经释放。
(4),I/O操作完成。
(5),对应过进的suspend对应的resume方法。
4,死线程
(1),因为run方法正常退出而自然死亡。
(2),因为一个未捕获的异常终止了run方法而使线程猝死。
(3),已经过时的stop方法。
汇总内容请点下面
- 大小: 8.9 KB
分享到:
相关推荐
理解这些状态以及它们之间的转换是分析多线程问题的关键。 4. **同步机制**:Java提供了多种同步机制,包括synchronized关键字、Lock接口(如ReentrantLock)以及volatile关键字。synchronized用于控制对共享资源的...
- 线程可以在其生命周期中经历多次状态转换,特别是在等待和同步机制中。 6. 多线程的挑战 - 多线程编程虽然强大,但也存在许多挑战,如线程死锁、资源竞争、优先级反转等问题。 - 死锁是指两个或多个线程在执行...
- **状态转换**: - 当线程被创建但尚未启动时,它的状态是 `NEW`。 - 调用 `start()` 方法后,线程进入 `RUNNABLE` 状态。 - 当线程调用了 `wait()` 或 `sleep()` 等方法时,线程进入 `WAITING` 或 `TIMED_...
线程的启动、执行和结束需要按照特定的状态转换。 - **线程的停止**:线程不能被外部强制停止,应通过共享变量或中断标志来提示线程结束,让线程自行释放资源并退出。 3. **线程类型** - **用户线程**:正常执行...
线程的状态转换是由Java的线程API(如start()、join()、wait()、notify()等)来控制的。 【线程调度】是操作系统分配CPU时间片给线程的过程,可以是抢占式或非抢占式。在Java中,线程调度通常由JVM控制,开发者可以...
- **创建线程**:Java提供了两种方式创建线程——通过实现Runnable接口或继承Thread类。前者更便于实现多继承,后者则简化了线程的创建过程。 2. **线程状态** - **五种线程状态**:新建、可运行、运行、阻塞和...
- **实现Callable接口并使用FutureTask**:这种方式不仅可以实现多线程,还可以获取线程执行的结果。 - **使用ExecutorService和ThreadPoolExecutor**:这是一种高级的线程池管理机制,可以有效地管理和控制线程的...
了解这些状态有助于理解和调试多线程程序。 五、线程调度 1. 非抢占式调度:线程按照它们被创建的顺序依次执行,除非当前线程主动让出CPU。 2. 抢占式调度:Java虚拟机采用优先级调度,线程优先级高的先执行。但是...
本实践项目“Java多线程与线程安全实践——基于Http协议的断点续传”深入探讨了如何利用多线程技术实现HTTP协议下的断点续传功能,这通常在大文件下载场景中应用。 首先,多线程允许程序同时执行多个任务,提高了...
4. `thread.cpp` 和 `thread.h`:这些文件可能涉及到线程管理,因为模数转换可能会在后台进行,以免阻塞用户界面。 5. `shiyan_2.pro`:这是Qt项目的配置文件,指定了编译和链接所需的库和设置。 在实际开发过程中...
本文将深入探讨基于.NET Framework 2.0开发的多线程程序——MailCrawler,它是一种专门用于从网页中高效抓取邮箱地址的工具。 首先,我们需要理解多线程的概念。在单线程程序中,任务是按顺序执行的,而多线程则...
在IT行业中,构建一个多人聊天室是常见的应用场景,如标题所示,这通常涉及到网络通信、多线程编程、用户界面设计等技术。这篇博客“通信——实现多人聊天室”(博文链接:...
9. **多线程实现与同步方式**:多线程有两种实现,即`Thread`子类和`Runnable`接口。同步有`synchronized`块/方法,以及`Lock`接口(如`ReentrantLock`,`Condition`等)。 10. **线程状态**:Java线程有五种基本...
4. 并行处理:为了提高效率,源码可能采用了多线程或异步处理技术,使得多个视频转换任务可以同时进行。 5. 错误处理和状态跟踪:一个完善的系统应该包含错误处理机制,如异常捕获和日志记录,以及转换过程的状态...
通过一个具体的案例——多线程烤面包机的状态机模型,我们将深入探讨如何应用UML来描述系统的动态行为。 #### 二、多线程状态机简介 多线程状态机并不是一个新的概念,在很多领域都已经被使用多年,尤其是在那些...
这可能包括减少Draw Call(绘制调用)、使用批处理技术、优化纹理压缩、避免不必要的计算以及利用多线程等。 7. **框架与架构**:游戏可能采用了MVC(Model-View-Controller)或MVVM(Model-View-ViewModel)等设计...
线程有5种状态,状态转换的过程如下图所示:多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。考虑这样一种情况:一个列表里所有元素都是0,线程...
他们遵循一定的状态转换规则,如:等待状态的哲学家在左右两侧的餐具都为空闲时才能进餐,进餐后必须释放餐具进入思考状态。 - 使用信号量(semaphore)来实现进程间的同步,例如可以设置一个信号量数组,用于表示...