線程的實現方式二
線程實現方式二:
1.自定義一個類實現runnable接口
class Thread implements Runnable
查看源代碼,我們可以知道Thread實現了runnable接口
runnable中只有一個run抽象類
2.實現run方法,把自定義線程的任務定義在run方法裏面
3.創建一個runnable實現類對象
4.創建Thread方法,並把runnable實現類對象作為實參傳過去
Thread的構造方法:
Thread(Runnable target) 分配新的
Thread
Thread(Runnable target ,String name) 分配新的
Thread
對象並這個可以給線程一個名字
5.並用Thread方法的start方法開啟一個線程線程
start方法不是靜態的,要實例化對象
疑問1:runnable的實現類是線程類嗎?
不是,只有Thread和Thread的子類才是線程對象
rannable的實現類只是是實現了rannable接口的對象而已
疑問2:為什麽我們調用Thread的start方法可以執行runnable接口的實現類的run方法呢?
源代碼如下:
Thread類的構造方法 public Thread(Runnable target, String name) { init(null, target, name, 0); } Thread類的run方法 public void run() { if (target != null) { target.run(); } } Thread類的target成員變量 private Runnable target;
原來,然後當我們調用Thread的start方法的時候,就調用了Thread的run方法,
而我們傳遞一個runnable實現類的對象,然後Thread的run方法會調用runnable實現類的run方法
下面是實現runnable接口的實例代碼:
public class Demo7 implements Runnable { @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(Thread.currentThread().getName()+i); } } public static void main(String[] args) { Demo7 demo = new Demo7(); Thread thread = new Thread(demo,"狗娃"); thread.run(); thread.start(); for (int i = 0; i < 50; i++) { System.out.println(Thread.currentThread().getName()+i); } } }
線程的實現方式二