線程的初步認識(Thread類和Runnable接口)

一、線程的創建方式

  • 利用Thread子類創建線程
  • 直接創建線程對象,然後實現Runnable接口。

①下面是一個利用線程子類創建一個簡單線程的demo

CreateThread類

public class CreateThread extends Thread {
	public void run(){
		for(int i=0;i<10;i++){
			System.out.println("No."+i);
		}
	}
	public static void main(String args[]){
		CreateThread ct = new CreateThread();
		CreateThread01 ct01 = new CreateThread01();
		ct.start();
		ct01.start();
	}

}
測試類

public class CreateThread01 {
	public void run(){
		for(int i=0;i<10;i++){
			System.out.println("--"+i);
		}
		
	}

}

②利用Runnable創建一個線程的小demo   [其中,run()方法是必須實現的方法]


public class ThreadMain {
	public static void main(String arga[]){
		ThreadRunnable tr1 = new ThreadRunnable();
		ThreadRunnable tr2 = new ThreadRunnable();
		Thread t1 = new Thread(tr1);
		Thread t2 = new Thread(tr2);
		t1.setName("t1");
		t2.setName("t2");
		t1.start();
		t2.start();
	}
}

public class ThreadRunnable implements Runnable{
	@Override
	public void run() {
		int flag = 1;
		// TODO Auto-generated method stub
		String name  = Thread.currentThread().getName();
		if(name.equals("t1")){
				System.out.print("現在執行的線程是:t1");
		}else{
			System.out.print("現在執行的線程是:t2");
		}
	}
}

二、線程的簡單應用

  • 介紹線程中常用的sleep()方法
  • 計時器線程Timer類

①利用sleep()方法,每隔一秒打印一次當前時間

      構造方法:sleep(int millsecond)單位:毫秒

public class TimerMain {
	public static void  main(String args[]){
		CountTime ct = new CountTime();
		Thread t = new Thread(ct);
		t.start();
	}

}
public class CountTime implements Runnable{
	
	SimpleDateFormat m = new SimpleDateFormat("hh:mm:ss");
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true){
			Date date = new Date();
			System.out.println(m.format(date));
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

②讓所要執行的代碼過一段時間執行

(比如可以利用Timer類實現一個鬧鐘,每隔隔一秒獲取一次系統時間,當設置時間等於系統時間,鬧鈴等。。。好吧,那其實是我android課上利用Timer寫的一個程序)

下面這個小demo,用到類Timer類常用的schedule()  方法,下面是它的構造方法

  • public void schedule(TimerTask task,long delay)
  • public void schedule(TimerTask task,Date time)
  • public void schedule(TimerTask task,long delay,long period)
  • public void schedule(TimerTask task,Date firstTime,long period)
public class TimerMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Timer  t = new Timer();
		long startTime = System.currentTimeMillis();
		t.schedule(new TimerTask(){
		int flag = 1;
			@Override
			public void run() {
				// TODO Auto-generated method stub
				long endTime = System.currentTimeMillis();
				System.out.print("過了"+String.valueOf(endTime-startTime)+"該語句開始執行");
				flag=0;	
				if(flag==0){
					t.cancel();
				}
			}},1000,1000);
		}
}

關於對線程的學習,初學者可能覺得他沒什麼用,其實我學了java兩年了,最近在學Android才發現線程很重要很重要的一章。我也是爲此來複習線程的一些簡單知識。有興趣的人還可以看看,java有多多線程編程,其中的種種,不是我能述盡的。提供一個傳送門  https://www.runoob.com/java/java-multithreading.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章