Java线程:线程状态

线程可以创建6状态:  New()新创建、Runnable(可运行)、Blocked(被阻塞)、 Waiting(等待)、Timed waiting(计时等待)、Terminated(被终止)1 新建线程  当用new操作符创建一个线程时,如new Thread(r),该线程还没有开始运行。这意味着它的状态是new。当一个线程处于此状态时,程序还没开始执行线程中的代码。在线程运行之前还有一些基础工作要做。2 可运行线程  一旦调用start()方法,线程就处于runnable状态,但是却不必保持运行。运行中的线程中断,目的是为了让其他线程获得运行机会。抢占式调度系统给每一个可运行线程一个时间片来执行任务。当时间片用完,会剥夺该线程的运行权,并给另一个线程运行机会。当选择下一个进程时,会考虑线程的优先级。3 被阻塞线程和等待线程    如上图所示,当一个线程试图获取一个内部对象锁,而该锁被其他线程持有,则该线程进入堵塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有时,变为非堵塞状态。  当线程等待另一个线程通知调度器一个条件时,自己进入等待状态。有几个方法有一个超时参数。调用它们导致线程进入计时等待状态。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法由Thread.sleep, Object.wait, Thread.join, Lock.tryLock, Condition.await的计时版。  当一个堵塞或等待的线程被重新激活时(例如,因超时期满或成功获得了一个锁),调度器会检查是否比当前运行的线程有更高的优先级。 4 被终止的线程  线程被终止的原因:    1) run方法正常退出而自然死亡。    2) 因为一个没有捕获的异常终止了run方法而导致意外死亡。
时间: 2024-10-15 05:07:09

Java线程:线程状态的相关文章

Java 线程的状态

Java Thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等 BLOCKED  这个状态下, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchro

Java - "JUC线程池" 线程状态与拒绝策略源码分析

Java多线程系列--"JUC线程池"04之 线程池原理(三) 本章介绍线程池的生命周期.在"Java多线程系列--"基础篇"01之 基本概念"中,我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED. 线程池状态定义代码如下: private final AtomicI

Java多线程学习之线程的状态及中断线程

线程的状态 新建(new):当线程被创建时,它只会短时间处于这种状态.它已经分配了必要的系统资源,完成了初始化.之后线程调度器将把这个线程转变为可运行或者阻塞状态: 就绪(Runnable):在这种状态下,只要调度器分配时间片给线程,线程就可以运行了: 阻塞(Blocked):有某个条件阻止线程运行,调度器将忽略阻塞状态的线程,不会分配时间片给它,直到线程进入就绪状态,它才有可能执行: 死亡(Dead):处于死亡或者终结状态的线程将不再是可调度的,并且也不会被分配到时间片.任务死亡的方式通常是从

Java线程池中线程的状态简介

首先明确一下线程在JVM中的各个状态(JavaCore文件中) 1.死锁,Deadlock(重点关注) 2.执行中,Runnable(重点关注) 3.等待资源,Waiting on condition(重点关注) 4.等待监控器检查资源,Waiting on monitor(eg:如果使用System.out.println等需要分配计算机资源的时候线程会如此等待,主要还需看堆栈) 5.暂停,Suspended 6.对象等待中,Object.wait() 7.阻塞,Blocked(重点关注) 8

Java多线程之线程的状态以及线程间协作通信导致的状态变换

一:线程的状态以及变化图 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态). New:新建状态,当线程创建完成时为新建状态,即new Thread(...),还没有调用start方法时,线程处于新建状态. Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源.处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来

Java多线程——线程的生命周期和状态控制

一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它

Java的多线程 --线程的状态

线程可以有6中状态. [1].New(新生) [2].Runnable(可运行) [3].Blocked(被阻塞) [4].Waiting(等待) [5].Timed Waiting(计时等待) [6].Terminated(被终止) 1.新生(New)线程: 当使用new 操作符创建一个先的线程,但该线程还没有调用start()方法.线程这个时候的状态就是新生,这个时候我们可以做些初始化之类的工作. 2.可运行(Runnable)线程: 一旦调用了start()方法,这个线程就处于可运行(Ru

Java千百问_01基本概念(007)_线程的状态有哪些

点击进入_更多_Java千百问 1.线程的状态有哪些 在java中java.lang.Thread类有一个变量threadStatus,标示了该线程的当前状态,它是一个int类型,但是对应的get方法返回值是一个枚举(Thread的内部类),源码如下: public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable th

线程的生命周期 - 理解Java中线程的状态

刚刚开始学cocos2-x,仅仅是按照教程把已经安了一般Android的开发环境的eclipse重新升级到安装好cdt和ndk就花了我几十小时,差点都要放弃了. 参考博客 D:\cocos2d-x\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt 说说大概的过程: 下载ndk插件,ndk包,cdt插件.最开始我按照书上的下载了cocos2d-x 2.0.1,希望跟书上统一起来,这样以后学习的时候可以参考书上的也不会遇到太

java中线程的状态

java中线程有哪些状态? Thread类有一个内部的枚举,State 1.NEW 创建了一个Thread对象,还没有执行start之前,状态为NEW 2.RUNNABLE 调用了Thread的start()方法,状态变为 RUNNABLE 3.BLOCKED 正在等待获取锁,状态为BLOCKED.例如synchronized 4.WAITING 调用 Object.wait() 或 join() 方法后,线程进入WAITING状态.调用wait()方法需要通过notify()或notifyAl