• 单继承具有局限性,推荐使用Runnable接口,启动线程必须借用Thread类对象
  • new Thread(Run,String s).start() ,new Thread()可以传字符串
  • Thread.currentThread().getName();当前线程的名字,即传入的字符串
  • 重写的run()方法没有返回值,且不能抛出异常
  • Thread.sleep(200);暂停该线程200毫秒延迟,1000毫秒约等于一秒

模拟抢票:

public class ThreadDownload implements Runnable {

private int num=99;
public void run()
{
	while(true)
	{
		if(num<0)
		{
			break;
		}
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  //模拟延迟,停止200毫秒
		System.out.println(Thread.currentThread().getName()+"-"+num--);
	}
}

public static void main(String[]args)
{   //一份资源
	ThreadDownload web=new ThreadDownload();
	System.out.println(Thread.currentThread().getName());//在main线程中,打印main
	//多个代理
	new Thread(web,"a").start();
	new Thread(web,"b").start();
	new Thread(web,"c").start();
}
}

模拟龟兔赛跑:

public class ThreadDownload implements Runnable {
private String winner;
public void run()
{
	
	for(int step=1;step<=100;step++)
	{
		if(Thread.currentThread().getName().equals("兔子")&&step%10==0)
		{
			try {
				Thread.sleep(100);  
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println(Thread.currentThread().getName()+"-->"+step);
		boolean flag=gameOver(step);
		if(flag)
		{
			break;
		}
	}
}
private boolean gameOver(int step)
{
	if(winner!=null)
	{
		return true;
	}else
	{
		if(step==100)
		{
			winner=Thread.currentThread().getName();
			System.out.println("winner=="+winner);
			return true;
		}
	}
	
	return false;
}
public static void main(String[]args)
{   //一份资源
	 ThreadDownload td=new ThreadDownload();
	new Thread(td,"乌龟").start();
	new Thread(td,"兔子").start();
}
}