用Java的Thread、Runnable、Timer三種方法實現每隔一毫秒列印Hello,同時計算從1加到10000,算完後輸出結果並停止列印Hello。

sammwang發表於2021-01-02

用Java的Thread、Runnable、Timer三種方法實現每隔一毫秒列印Hello,同時計算從1加到10000,算完後輸出結果並停止列印Hello。

一、Thread實現
//列印Hello
package thread;
public class PrintHello extends Thread {
public static boolean flag=true;//標誌位:根據標誌位判斷是否要執行列印
private String str;

public PrintHello() {}
public PrintHello(String str) {
	this.str=str;
}

@Override
public void run() {				
	while(flag){
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
		
		System.out.println(str);			
	}		
}

//關閉執行緒
public void shutdown(){
	flag=false;
}

}

//計算從1加到100000。計算完成後輸出結果,並關閉PrintHello執行緒。
package thread;
public class Calculation extends Thread {
int sum=0;
@Override
public void run() {
for(int i=1;i<=10000;i++){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
sum+=i;
System.out.println(sum);
}
//關閉PrintHello執行緒
new PrintHello().shutdown();
}
}

//主程式
package thread;
public class TestThread {

public static void main(String[] args) {
	PrintHello thPrint = new PrintHello("Hello");
	Calculation thCalc = new Calculation();
	
	thPrint.start();
	thCalc.start();
}

}

二、Runnable實現
//列印Hello
package runnable;
public class PrintHello implements Runnable {
private static boolean flag=true;
private String str;
public PrintHello() {

}
public PrintHello(String str) {
	this.str=str;
}

@Override
public void run() {
	while(flag){
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(str);
	}		
}

//關閉執行緒
public void shutdown(){
	flag=false;
}	

}

//計算從1加到100000。計算完成後輸出結果,並關閉PrintHello執行緒。
package runnable;
public class Calculation implements Runnable {
int sum=0;

@Override
public void run() {
	for(int i=1;i<=10000;i++){
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		sum+=i;
		System.out.println(sum);
	}
	//關閉PrintHello執行緒
	new PrintHello().shutdown();
}

}

//主程式
package runnable;
public class TestRunnable {
public static void main(String[] args) {
Thread thPrint=new Thread(new PrintHello(“Hello”));
Thread thCalculation=new Thread(new Calculation());

	thPrint.start();
	thCalculation.start();
}

}

三、Timer實現
package timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

class PrintAndCalculation extends TimerTask{
int i=1;
int sum=0;

@Override
public void run() {
	Timer timer=new Timer();
	if(i>10000){
		timer.cancel();
	}else{
		System.out.println("Hello");
		sum+=i;	
		i++;
		System.out.println(sum);
		timer.cancel();			
	}		
}

}

public class TimerPrintCalculation {
public static void main(String[] args) {
Timer timer=new Timer();
timer.schedule(new PrintAndCalculation(), new Date(), 1);
}
}

相關文章