Java线程的状态

线程的状态:
新生状态 : new的时候,线程处于新生状态
就绪状态 : start()方法后线程进入到就绪状态,等待cpu的调度,进入到就绪队列
运行状态 : cpu把时间片资源分配给某一个线程,线程才可以进入到运行状态
阻塞状态 : sleep()非能够正常运行完毕,直到阻塞解除
终止状态 : 线程结束
如果一个线程一旦进入到阻塞状态,无法直接恢复到运行状态,需要等待cpu调度
如果一个线程一旦进入到终止状态,无法恢复
一个线程如何进入终止状态: 1.正常运行完毕 2.通过标识判断 3.(stop(),destroy() 已过时)
一个线程如何进入就绪状态:
1.start()
2.yield() 礼让线程
3.阻塞解除
4.线程切换,被切换的线程直接进入就绪状态
一个线程如何进入阻塞状态:
1.sleep()
2.wait() 线程等待
3.join() 插队线程
线程阻塞状态:
sleep(): 抱着资源睡觉
对象锁不会释放,但是会让出cpu的资源
放大问题的可能性
模拟网络延迟

public class ThreadDemo02 implements Runnable{
	public static void main(String[] args) {
		new Thread(new ThreadDemo02()).start();
	}	
	@Override
	public void run() {
		for(int i=10;i>=0;i--){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(i);
		}
	}	
}

.join() 插队线程 :

/*
 * join() 插队线程
 */
public class JoinDemo04 {
	public static void main(String[] args) {
		new Thread(new Father()).start();
	}
}
class Father implements Runnable{
	@Override
	public void run() {
		System.out.println("想抽烟了....");
		System.out.println("让儿子去买烟....");
		Thread th=new Thread(new Son());
		th.start();
		/*try {
			th.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}*/
		System.out.println("接过烟,抽一口!!!!!");
	}
	
}
class Son implements Runnable{
	@Override
	public void run() {
		System.out.println("接过钱,去买烟...");
		System.out.println("路过一个游戏厅,进去玩10s钟...");
		for(int i=1;i<=10;i++){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(i+"s钟过去了");
		}
		System.out.println("赶紧去买烟...");
		System.out.println("把烟给老爸,把钱揣兜里了...");
	}
	
}

yield() 礼让线程:

public class YieldDemo03 implements Runnable{
	public static void main(String[] args) {
		new Thread(new YieldDemo03(),"A").start();
		new Thread(new YieldDemo03(),"B").start();
	}
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+"线程开始了");
		Thread.yield();
		System.out.println(Thread.currentThread().getName()+"线程结束了");
	}	
}

现成的优先级:
Thread.State getState()
返回该线程的状态。
优先级: 1~10 1最小 10最大,默认5
提高优先执行可能性,但是不是一定的
void setPriority(int newPriority) 更改线程的优先级
int getPriority() 返回线程的优先级。
static int MAX_PRIORITY
线程可以具有的最高优先级。
static int MIN_PRIORITY
线程可以具有的最低优先级。
static int NORM_PRIORITY
分配给线程的默认优先级。

public class StateDemo05 implements Runnable{
	public static void main(String[] args) {
		Thread th=new Thread(()->{
			for(int i=0;i<=10;i++){
				if(i==5){
					try {
						Thread.sleep(3000);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		});
		
		System.out.println(th.getState());  //NEW
		th.start();
		System.out.println(th.getState());  //RUNNABLE
		
		while(true){
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(th.getState());
			if(th.getState()==Thread.State.TERMINATED){
				System.out.println("th线程的状态为"+th.getState());
				break;
			}
		}		
		Thread th1=new Thread(new StateDemo05(),"A");
		Thread th2=new Thread(new StateDemo05(),"B");
		Thread th3=new Thread(new StateDemo05(),"C");
		th1.setPriority(Thread.MIN_PRIORITY);
		th2.setPriority(Thread.MAX_PRIORITY);
		th3.setPriority(7);
		th1.start();
		th2.start();
		th3.start();
	}
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+Thread.currentThread().getPriority());
	}	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值