package demoThread;

import java.util.Scanner;

public class TestThread {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入循环上限:");
		int a=sc.nextInt();
		sc.close();
		
		PrimeThread subthread =new PrimeThread(a);//循环的上限为a		
		subthread.start();//启动用户线程,使其处于就绪状态
		while(subthread.isAlive()&&subthread.readyToGoOn())
		{
			System.out.println("Counting the prime number...\n");//说明主线程在运行
			try {
				Thread.sleep(500);//使主线程挂起500ms,以便用户线程取得控制权
			}
			catch(InterruptedException e)//sleep方法可能引起异常,必须加以处理
			{
				return;
			}
		}//while循环结束
		System.out.println("达到循环上限,程序结束...");//保留屏幕以便观察		

	}//main方法结束

}//主类结束 

class PrimeThread extends Thread//创建用户自己的Thread子类,在run()中实现程序子线程操作
{
	boolean m_bContinue =true;//标志本线程是否继续
	int m_nCircleNum;//循环的上限 
	PrimeThread(int Num)//构造函数 
	{
		m_nCircleNum=Num;
	}
	boolean readyToGoOn() //判断本线程是否继续执行
	{
		return(m_bContinue);
	}
	public void run()//继承并重载父类Thread的 run()方法,在该线程被启动时自动执行
	{
		int number=2;
		boolean flag =true;
		while(true)//无限循环
		{
			for(int i=2;i<number;i++)//检查number是否为素数
			if(number%i==0)
				flag =false;
			if(flag)//打印该数是否为素数的信息
				System.out.println(number+"是素数");
			else
				System.out.println(number+"不是素数");
			    number++;//修改number的数值,为下一轮素数检查做准备
			    if(number>m_nCircleNum)//达到要求检查数值的上限
			    {
			    	m_bContinue=false;//则准备结束此线程
			    	return;//结束return()方法,结束线程
			    }
			    flag=true;//恢复flag,准备检查下一个number
			    try
			    {
			    	sleep(500);//一轮检查之后,暂时休眠一段时间
			    }
			    catch(InterruptedException e)
			    {
			    	return;
			    }
		}//while循环结束
	}//run()方法结束
}//primeThread类定义结束