线程的状态

线程的状态

线程被创建时,属于新建状态,调用start后进入就绪状态

就绪状态被cpu调用时,进入运行状态

运行状态在调用sleep、wait、join后会进入阻塞状态

运行状态执行完成后会进入死亡状态,这里包括正常执行完毕和异常执行完毕

运行状态在os切换时,线程会进入就绪状态

线程wait进入阻塞状态,被调用notify之后,会进入就绪状态

线程sleep进入阻塞状态,时间过后会进入就绪状态

当前线程的子线程join之后,当前线程进入阻塞状态,在子线程死亡之后,当前线程进入就绪状态

阻塞状态的线程,被中断之后会进入死亡状态

线程相关的一些方法解析

sleep

详细描述:

Thread类的静态方法

public static native void sleep(long millis) throws InterruptedException;

使当前线程睡眠n毫秒,线程从运行状态进入阻塞状态,n毫秒之后重新进入就绪状态,继而进入运行状态

进入阻塞状态后可以被中断

被调用t.interrupt()之后,该线程会被中断,sleep方法处抛出InterruptedException,捕获之后可以做相应处理

join

Thread类的非静态方法

public final void join() throws InterruptedException

使用举例:

Thread t = new Thread();

t.start();

t.join();

这里定义主线程main,子线程t

main调用t.join之后会进入阻塞状态,等待t线程的完结,t完结之后,main线程进入就绪状态

main线程在调用t.join之后,也可以被interrupt()中断。

yield

Thread类的非静态方法

public static native void yield();

当前线程主动让出cpu,从运行状态进入就绪状态,这个动作并不是立即执行的

interrupt

Thread类的非静态方法

public void interrupt()

线程对象调用interrupt之后,会从阻塞状态退出来,并抛出InterruptedException异常

wait

Object类的方法

public final void wait() throws InterruptedException

使用举例

Object obj;

obj.wait();

此方法必须在同步块中调用,wait之后线程进入阻塞状态,当是不会释放对象的锁

被调用interrupt()之后,该线程会被中断,抛出InterruptedException

notify

Object类的方法

public final native void notify()

Object obj;

obj.notify();

此方法会唤醒在对象obj上wait的线程,只会唤醒一个

notifyAll

Object类的方法

public final native void notifyAll();

Object obj;

obj.notifyAll();

此方法会唤醒在对象obj上wait的所有线程

时间: 2024-07-29 06:37:32

线程的状态的相关文章

iOS开发多线程篇—线程的状态

iOS开发多线程篇—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍. 线程的开启: [self.thread start]; 线程的运行和阻塞: (1)设置线程阻塞1,阻塞2秒 [NSThread sleepForTimeInterval:2.0]; (2)第二种设置线程阻塞2,以当前时

【学习总结】【多线程】 安全隐患 & 通讯 & 线程的状态

一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 所以很自然的,当某个线程进入某个事件,处理某个事件,访问某个对象的时候,先加 “锁” 互斥锁的优缺点 优点:能有效防止因多线程抢夺资源造成的数据安全问题 缺点:需要消耗大量的CPU资源 互斥锁的使用前提:多条线程抢夺同一块资源 相关专业术语:线程同步,多条线程按顺序地执行任务 互斥锁,就

Java 线程的状态

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

线程的状态以及相关的操作方法

线程的状态:创建线程Thread name =  new Thread() 就绪状态 运行状态 堵塞状态 死亡状态 线程的操作:1.在Thread类中可以通过getName()和setName()方法设置线程的名称,尽量避免名称的重复出现.要是在线程的操作过程中没有给线程一个名称,则在系统使用时会为线程分配一个名称,Thread-XX.并在其中Thread类中存在一个static属性. 1 package Rubbableclass; 2 class MyThread implements Ru

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

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

Lua中的线程和状态

1.概述 线程(thread)作为Lua中一种基本的数据类型,它代表独立的执行线程(independent threads of execution),线程类型是实现协程(coroutines)的基础,注意这里的线程类型不要与操作系统线程混淆,Lua的线程类型是Lua虚拟机实现一种数据类型. 从Lua脚本来看,一个协程就是一个线程类型,比如: local co = coroutine.create(function() print("hi") end) print(co) --outp

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

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

线程的状态和常用方法

线程的状态一个线程从创建,启动到终止的整个过程称为线程的生命周期,在其间的任何时刻,线程总是处于某个特定状态.这些状态如下:新建状态:线程对象已经创建,对应new语句.就绪状态:就绪状态也可叫做可执行状态,对应start()方法.运行状态:当处于就绪的线程被调度并获得了cpu等执行必须的资源时,便进入到该状态,即运行了run()方法.等待/阻碍/睡眠状态:三个状态组合为一种,其共同点是线程仍然是活的,但是当前没有条件运行.换句话说,它是可运行的,如果某个事件出现,它可能返回到可运行状态,对应以下

iOS多线程技术—线程的状态

iOS多线程技术—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍. 线程的开启: [self.thread start]; 线程的运行和阻塞: (1)设置线程阻塞1,阻塞2秒 [NSThread sleepForTimeInterval:2.0]; (2)第二种设置线程阻塞2,以当前时间