什么是線程?
線程(Thread)是程序內部的一條執行流程。
程序如果只有一條執行流程,那這個程序就是單線程程序。
什么是多線程?
多線程是指從軟硬件上實現的多條執行流程的技術(多條線程由CPU負責調度執行)。
創建線程方式一:繼承Thread父類
一個類繼承了Thread父類,就可以成為線程,但不過要重寫run方法。
通過start方法調用,不能直接調用run方法,否則還是單線程。
例如:class MyThread extendsThread{};
? ? ? ? ? ?MyThread p =? new?MyThread;
? ? ? ? ? ?p.start();
缺點:不能繼承其他類了。線程不能返回值。
創建線程方式二:實現Runnable接口
一個類實現了Runnable接口,則這個類作為對象直接傳入Thread構造器中,那么就可以得到一個線程對象。
例如:
class PrimeRun implements Runnable{} PrimeRun run = new PrimeRun(); Thread thread = new Thread(run); thread.start();
也可以使用匿名內部類寫法:
Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("執行了");} });
其實就是寫法不同,原理還是一樣的。
缺點:還是不能能有返回值。
創建線程方式三:實現Callable接口
定義一個類實現Callable接口,重寫call方法,封裝要做的事情,和要返回的數據。
把Callable類型的對象封裝成FutureTask(線程任務對象)。
把線程任務對象交給Thread對象。
調用Thread對象的start的方法啟動線程。
線程執行完畢后、通過FutureTask對象的get的方法去獲取線程任務對象執行的結果。
例如:
class MyCallable implements Callable<String>{}; MyCallable myCallable = new MyCallable(5); FutureTask<String> futureTask = new FutureTask<>(myCallable); Thread thread2 = new Thread(futureTask); thread2.start();
缺點:代碼復雜。