java中线程有几种状态图解

java线程中的几种状态以及相互转换~

NEW: 线程创建之后,但是还没有启动(not yet started)。
RUNNABLE: 正在Java虚拟机下跑任务的线程的状态。在RUNNABLE状态下的线程可能会处于等待状态, 因为它正在等待一些系统资源的释放,比如IO
BLOCKED: 阻塞状态,等待锁的释放,比如线程A进入了一个synchronized方法,线程B也想进入这个方法,但是这个方法的锁已经被线程A获取了,这个时候线程B就处于BLOCKED状态
WAITING: 等待状态,处于等待状态的线程是由于执行了3个方法中的任意方法。 1. Object的wait方法,并且没有使用timeout参数; 2. Thread的join方法,没有使用timeout参数 3. LockSupport的park方法。 处于waiting状态的线程会等待另外一个线程处理特殊的行为。 再举个例子,如果一个线程调用了一个对象的wait方法,那么这个线程就会处于waiting状态直到另外一个线程调用这个对象的notify或者notifyAll方法后才会解除这个状态
TIMED_WAITING: 有等待时间的等待状态,比如调用了以下几个方法中的任意方法,并且指定了等待时间,线程就会处于这个状态。 1. Thread.sleep方法 2. Object的wait方法,带有时间 3. Thread.join方法,带有时间 4. LockSupport的parkNanos方法,带有时间 5. LockSupport的parkUntil方法,带有时间
TERMINATED: 线程中止的状态,这个线程已经完整地执行了它的任务

新建(new)
新建一个线程的对象。
可运行(runable)
线程对象创建后,其他线程调用该线程的start方法。或者该线程位于可运行线程池中等待被线程调用,已获取cpu的使用权。
运行(running)
可运行的线程获取了cpu的使用权,执行程序代码/
阻塞(block)
由于某些原因该线程放弃了cpu的使用权。停止执行。除非线程进入可运行的状态,才会有机会获取cpu的使用权。
1. 等待阻塞:运行中的线程执行wait方法,这时候该线程会被放入等待队列。
2. 同步阻塞:运行中的线程获取同步锁,如果该同步锁被别的线程占用,这个线程会成被放入锁池,等待其他线程释放同步锁。
3. 其他阻塞:运行的线程执行sleep或者join方法这个线程会成为阻塞状态。当sleep超时,join等待线程终止,该线程会进入可运行状态。
死亡(dead)
线程run mian 执行完毕后,或者因为某些异常产生退出了 run 方法,该线程的生命周期结束。

1. NEW, 这个最简单了,

static void NEW() {
Thread t = new Thread ();
System. out.println(t.getState());
}

输出NEW

2. RUNNABLE, 也简单, 让一个thread start, 同时代码里面不要sleep或者wait等

private static void RUNNABLE() {
Thread t = new Thread(){

public void run(){
for(int i=0; i<Integer.MAX_VALUE; i++){
System. out.println(i);
}
}

};

t.start();
}

3. BLOCKED, 这个就必须至少两个线程以上, 然后互相等待synchronized 块

private static void BLOCKED() {

final Object lock = new Object();

Runnable run = new Runnable() {

@Override
public void run() {
for(int i=0; i<Integer.MAX_VALUE; i++){

synchronized (lock) {
System. out.println(i);
}

}
}
};

Thread t1 = new Thread(run);
t1.setName( “t1”);
4. WAITING, 这个需要用到生产者消费者模型, 当生产者生产过慢的时候, 消费者就会等待生产者的下一次notify

private static void WAITING() {

final Object lock = new Object();
Thread t1 = new Thread(){
@Override
public void run() {

int i = 0;

while(true ){
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
}
System. out.println(i++);
}
}
}
};

Thread t2 = new Thread(){
@Override
public void run() {

while(true ){
synchronized (lock) {
for(int i = 0; i< 10000000; i++){
System. out.println(i);
}
lock.notifyAll();
}

}
}
};
Thread t2 = new Thread(run);
5. TIMED_WAITING, 这个仅需要在4的基础上, 在wait方法加上一个时间参数进行限制就OK了.

把4中的synchronized 块改成如下就可以了.

synchronized (lock) {
try {
lock.wait(60 * 1000L);
} catch (InterruptedException e) {
}
System. out .println(i++);
}
t2.setName( “t2”);

t1.start();
t2.start();

}

6. TERMINATED, 这个状态只要线程结束了run方法, 就会进入了…

private static void TERMINATED() {
Thread t1 = new Thread();
t1.start();
System. out.println(t1.getState());
try {
Thread. sleep(1000L);
} catch (InterruptedException e) {
}
System. out.println(t1.getState());
}

JAVA中,线程有哪五个基本状态?他们之间如何让转化?并简述线程周期。
答:java中,每个线程都需经历新生、就绪、运行、阻塞和死亡五种状态,线程从新生到死亡的状态变化称为生命周期。用new运算符和Thread类或其子类建立一个线程对象后,该线程就处于新生状态。线程的生命周期,把图转化为文字就是:1、线程通过new方法创建,调用start,线程进入就绪状态,等待系统的调度(时间片轮...

java线程的几种状态
答:线程:1.sleep(1000) 睡眠,1秒后醒来。2.wait() ,等待状态,需要唤醒才能运行。3.notify() 唤醒等待中的线程。 主要用到的就是这三者。

线程的六种状态
答:        线程整个生命周期分为六种状态:NEW状态、RUNNABLE状态、BLOCKED状态、WAITING状态、TIMED_WAITING状态、TERMINATED状态。其中NEW状态、RUNNABLE状态与TERMINATED状态是每个线程必定经历的状态。下面我大致讲解一下每个状态的具体效果。   ...

java线程的状态图
答:这个图可以让你对线程的状态一目了然,很实用,希望能帮到你~

Java线程生命周期:从新生到死亡的旅程
答:Java线程的生命周期包括新生状态、就绪状态、运行状态、阻塞状态和死亡状态。本文将详细介绍Java线程的生命周期,帮助读者更好地理解线程的运行机制。新生状态当使用new关键字和Thread类或其子类创建一个线程对象后,该线程便进入新生状态。此时,它拥有自己的内存空间,但尚未开始运行,因此被称为“not alive”。就绪...

Java线程的几种状态
答:1、新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)例如:Thread t1=new Thread();2、就绪(runnable)线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();3、运行(running)线程获得CPU资源正在...

Java Thread BLOCKED和WAITING两种状态的区别
答:Jstack的输出中,Java线程状态主要是以下几种:RUNNABLE 线程运行中或I/O等待 BLOCKED 线程在等待monitor锁(synchronized关键字)TIMED_WAITING 线程在等待唤醒,但设置了时限 WAITING 线程在无限等待唤醒 1) 让线程一直处于RUNNABLE public static void runnable() { long i = 0; while (true) {...

基于java 线程的几种状态
答:下面是java 线程的5种状态:1、新建(new)新建一个线程的对象。2、可运行(runable)线程对象创建后,其他线程调用该线程的start方法。或者该线程位于可运行线程池中等待被线程调用,已获取cpu的使用权。3、运行(running)可运行的线程获取了cpu的使用权,执行程序代码 4、阻塞(block)由于某些原因该线程放弃...

(二)线程状态、wait/notify
答:在java中线程一共有6种状态。分别为:sleep不会释放锁(CPU时间片),在存在锁的情况下,线程会一直占有锁,其他线程无法获取。wait会释放锁,允许其他线程进入同步方法。在调用notify唤醒后会重新去获取锁。sleep可以在任意地方使用,没有限制。wait只能在同步方法中使用,依赖于锁。问题:假如有一个生产者...

java中,一个运行的线程什么状态是它的结束
答:4)停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。当处于停滞状态的线程重新回到可执行状态时,它有可能重新执行。如通过对一个线程调用wait()函数后,线程就进入停滞状态,只有当两次对该线程调用notify或notifyAll后它才能两次回到可执行状态。

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网