java--多线程--线程状态

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35346829/article/details/86686285

(一)java线程有五大状态:

1.新生,2.就绪,3.运行,4.死亡,5.阻塞(同步阻塞,等待阻塞,其他阻塞)

(二)状态之间的转换

(三)线程方法

wait()  , sleep() 区别:

-sleep() 抱着cpu睡觉,占用资源

-wait() 释放资源

-线程终止的例子

/**
 * 0.终止线程的方法 
 * 1.自然结束  线程体运行完
 * 2.加入标志位
 * @author peiyu
 *
 */

public class ThreadTest1 implements Runnable {
	//
	private boolean flag = true;  // 加入终止标志位
	private String name;
	public ThreadTest1(String n) {
		this.name = n;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(flag) {
			System.out.println(name+"-->学习");
		}
		System.out.println("T-->over");
	}
	public void setFlag( ) {
		flag = false;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadTest1 T = new ThreadTest1("yu");
		new Thread(T).start();  // 代理方式,开启线程
		for(int i = 0;i<100;++i) {
			if(i == 10) {
				T.setFlag();
			}
			System.out.println("main-->"+i);
		}
	}
}

(四)观察线程状态

package peiyu;

public class Allstate {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		System.out.println();
		Thread t = new Thread( ()->{
			for(int i = 0;i< 5;++i) {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println( "000" );
			}
			
		});
		
		System.out.println(t.getState());
		
		t.start();
		System.out.println(t.getState());
		
		int n = Thread.activeCount(); // 活动的线程个数
		
		while(true) {
			Thread.sleep(500);
			if(t.getState().equals(Thread.State.TERMINATED))
				break;
			System.out.println(t.getState());	
		}
	}

}

猜你喜欢

转载自blog.csdn.net/qq_35346829/article/details/86686285