- 利用Thread实现,要求多线程求解某范围素数每个线程负责1000范围:线程1找1-1000;线程 2 找 1001-2000;线程 3 找2001-3000。编程程序将每个线程找到的素数及时打印。
class PrimeGenerator extends Thread{
private long beginNumber;
private long endNumber;
/**
* 构造方法
* @param beginNumber
* @param endNumber
*/
public PrimeGenerator(long beginNumber,long endNumber) {
this.beginNumber = beginNumber;
this.endNumber = endNumber;
}
/**
* 重写父类方法
*/
public void run() {
// This bucle never ends... until is interrupted
while (true) {
//如果是素数则输出
if (isPrime(beginNumber)) {
System.out.printf("Number %d is Prime\n",beginNumber);
}
// 如果线程中断,输出错误信息并结束
if (isInterrupted()) {
System.out.printf("The Prime Generator has been Interrupted\n");
return;
}
//如果开始值大于结束值,结束
if (beginNumber>endNumber) {
return;
}
//修改开始值
beginNumber++;
}
}
/**
* 判断一个数是否是素数,如果是则返回true,不是返回false
* @param number
* @return
*/
private boolean isPrime(long number) {
//如果一个数小于等于2,则是素数
if (number <=2) {
return true;
}
//如果一个数大于2,则判断该数是否能被2和number-1之间的数整除,
//如果能整除就不是素数
for (long i=2; i<number; i++){
if ((number % i)==0) {
return false;
}
}
return true;
}
}
public class PrimeTest {
public static void main(String[] args) {
//实例化3个线程,分别调用start方法来启动线程
PrimeGenerator t1=new PrimeGenerator(1,1000);
t1.start();
PrimeGenerator t2=new PrimeGenerator(1001,2000);
t2.start();
PrimeGenerator t3=new PrimeGenerator(2001,3000);
t3.start();
}
}
- 利用Runnable实现,要求多线程求解某范围素数每个线程负责1000范围:线程1找1-1000;线程 2 找 1001-2000;线程 3 找2001-3000。编程程序将每个线程找到的素数及时打印。
class PrimeGenerator implements Runnable{
private long beginNumber;
private long endNumber;
/**
* 构造方法
* @param beginNumber
* @param endNumber
*/
public PrimeGenerator(long beginNumber,long endNumber) {
this.beginNumber = beginNumber;
this.endNumber = endNumber;
}
/**
* 实现接口的run方法
*/
public void run() {
// This bucle never ends... until is interrupted
while (true) {
//如果是素数则输出
if (isPrime(beginNumber)) {
System.out.printf("Number %d is Prime\n",beginNumber);
}
//如果开始值大于结束值,结束
if (beginNumber>endNumber) {
return;
}
//修改开始值
beginNumber++;
}
}
/**
* 判断一个数是否是素数,如果是则返回true,不是返回false
* @param number
* @return
*/
private boolean isPrime(long number) {
//如果一个数小于等于2,则是素数
if (number <=2) {
return true;
}
//如果一个数大于2,则判断该数是否能被2和number-1之间的数整除,
//如果能整除就不是素数
for (long i=2; i<number; i++){
if ((number % i)==0) {
return false;
}
}
return true;
}
}
public class PrimeTest {
public static void main(String[] args) {
//实例化3个线程,分别调用start方法来启动线程
PrimeGenerator t1=new PrimeGenerator(1,1000);
new Thread(t1).start();
PrimeGenerator t2=new PrimeGenerator(1001,2000);
new Thread(t2).start();
PrimeGenerator t3=new PrimeGenerator(2001,3000);
new Thread(t3).start();
}
}
- 编写一个Java程序(包括一个主程序类,一个线程类。在主程序类中创建2个线程,将其中一个线程的优先级设为10,另一个线程的优先级设为6。让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。
class PriortyThread extends Thread{
private String name;
public PriortyThread(String name){
this.name = name;
}
/**
* 重写父类的run方法,输出200个语句
*/
public void run(){
for(int i=0;i<200;i++){
System.out.println("线程"+name+"正常运行");
}
}
}
- 编写一个计时器,每隔一秒钟,在控制台打印出最新时间。
public class Main {
public static void main(String[] args) {
while(true){
SimpleDateFormat sdf =new SimpleDateFormat("HH:mm:ss");
System.out.println(sdf.format(new Date()));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}