代码演示线程的TIMED_WAITING,BLOCKED,WAITING状态

package com.dq;

public class ThreadTest implements Runnable
{
	@Override
	public void run() 
	{
		// 线程1先进这个方法,当线程1睡眠时,线程2没有得到锁,于是它的状态为BLOCKED
		synchronized (this) 
		{
			System.out.println(Thread.currentThread().getName() + " 线程执行中,此时外面等待线程的状态为BLOCKED");
			try 
			{
				Thread.sleep(1000);  // 线程1运行到此处时状态是TIMED_WAITING
				wait();	// 线程运行到此处时线程状态为WAITING
			} 
			catch (InterruptedException e) 
			{
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) throws InterruptedException 
	{
		ThreadTest task = new ThreadTest();
		Thread thread1 = new Thread(task);
		Thread thread2 = new Thread(task);
		thread1.start();
		//这里休眠一小会是为了有机会执行线程1,线程1执行时进入了休眠状态
		Thread.sleep(22); 
		System.out.println("线程1状态: " + thread1.getState());
		thread2.start();
		// 这里再次休眠是为了线程2获得运行的机会,它运行run方法但没有获得锁,于是状态为BLOCKED
		Thread.sleep(22); 
		System.out.println("线程2状态: " + thread2.getState());
		// 这里休眠1200是为了让线程run方法的休眠时间过时,此时执行wait方法,线程进入等待状态WAITING
		Thread.sleep(1200);
		System.out.println("线程1状态: " + thread1.getState());
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值