Java線程--創建和啓動線程

  • 創建線程的方式
      1. extends Thread,重現run方法,在run方法中定義需要執行的任務

    public class CycleThread extends Thread {
    
    	@Override
    	public void run() {
    		while (true) {
    			System.out.println("sleepping");
    			System.out.println("studying");
    			System.out.println("eatting");
    			System.out.println("one day is over");
    			System.out.println();
    		}
    	}
    
    }

    創建和啓動線程

    public class TestThread {
    	
    	public static void main(String[] args) {
    		
    		CycleThread thread=new CycleThread();
    		
    		thread.start();
    	}
    
    }
    1.  implements Runnable,實現run方法,在run方法中定義需要執行的任務

    public class CycleRunnable implements Runnable {
    
    	@Override
    	public void run() {
    		while (true) {
    			System.out.println("sleepping");
    			System.out.println("studying");
    			System.out.println("eatting");
    			System.out.println("one day is over");
    			System.out.println();
    		}
    	}
    
    }

    創建和啓動線程

    public class TestRunnable {
    	public static void main(String[] args) {
    		
    		CycleRunnable circleRunnable=new CycleRunnable();
    		
    		Thread thread=new Thread(circleRunnable);
    		
    		thread.start();
    		
    	}
    
    }
  • start()run()方法的區別

    利用線程ID區分執行run()start()

    public class RunStartThread extends Thread {
    
    	private String name;
    	
    	public RunStartThread(String name)
    	{
    		this.name=name;
    	}
    	
    	
    	@Override
    	public void run() {
    		System.out.println(name +"線程ID: " + Thread.currentThread().getId());
    	}
    
    }

    測試

    public class TestRunStart {
    	public static void main(String[] args) {
    		
    		System.out.println("主線程ID: "+Thread.currentThread().getId());
    		
    		RunStartThread thread1=new RunStartThread("thread1");
    		thread1.start();
    		
    		RunStartThread thread2=new RunStartThread("thread2");
    		thread2.run();
    		
    	}
    	
    }

    執行結果

    注意這裏的主線程是main方法執行後所產生的java.exe進程中的主線程。

    1. thread1thread2的線程ID不同,thread2和主線程ID相同,說明通過run方法調用並不會創建新的線程,而是在主線程中直接運行run方法,跟普通的方法調用沒有任何區別
    2. 雖然thread1start方法調用在thread2run方法前面調用,但是先輸出的是thread2run方法調用的相關信息,說明新線程創建的過程不會阻塞主線程的後續執行。

    在Java中,這2種方式都可以用來創建線程去執行子任務,具體選擇哪一種方式要看自己的需求。直接繼承Thread類的話,可能比實現Runnable接口看起來更加簡潔,但是由於Java只允許單繼承,所以如果自定義類需要繼承其他類,則只能選擇實現Runnable接口。

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