1)繼承Thread,重寫其的run方法
2)實現Runnable接口
代碼如下:
- package com.study;
- /**
- *
- * @ClassName: ThreadTest
- * @Description: 創建線程的兩種方式
- * @author 我夕
- */
- public class ThreadTest {
-
- public static void main(String[] args) {
-
- System.out.println("當前線程的名字:"+Thread.currentThread().getName()+";線程ID:"+Thread.currentThread().getId());
-
- ThreadOne one=new ThreadOne();
- one.setName("ThreadOne");//為了便於調試,建議創建時給線程設個名稱
- one.start();
-
- Thread two2=new Thread(new ThreadTwo());
- two2.setName("ThreadTwo");
- two2.start();
-
- }
-
- //繼承Thread,覆蓋父類run方法
- public static class ThreadOne extends Thread{
- @Override
- public void run() {
- // TODO Auto-generated method stub
- super.run();
- //do xx
- System.out.println("當前線程的名字:"+Thread.currentThread().getName()+";線程ID:"+Thread.currentThread().getId());
- }
- }
-
-
- //實現Runnable接口
- public static class ThreadTwo implements Runnable{
-
- @Override
- public void run() {
- // TODO Auto-generated method stub
- //do xx
- System.out.println("當前線程的名字:"+Thread.currentThread().getName()+";線程ID:"+Thread.currentThread().getId());
- }
-
- }
- }
總結:
創建線程的傳統方式就上面兩種(這裡不考慮jdk1.5種線程並發庫裡的創建方式,後續會寫到),但寫的方式卻是多種多樣,希望初學者不要被其搞混掉
兩種方式都可以創建線程,第一種方式創建比較簡單,但由於java是單繼承的緣故,創建出的Thread子類就無法在繼承其他類;實現Runnable接口的方式可以將cpu、代碼和數據分開,同時創建出的線程可以共享處理同一份資源。
記住:Thread類本身也實現了Runnable接口,因此Thread類及其子類的對象也可以作為target傳遞給新的線程對象。