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类定义结束