多线程-Thread、Runnable、Callbale、Future
Thread:java使用Thread代表線程,所有的線程對象都必須是Thread類或其子類,可以通過繼承Thread類來創建并啟動多線程。
package org.github.lujiango;public class Test10 {static class MyThread extends Thread {@Overridepublic void run() {System.out.println("I am extend Thread...");}}public static void main(String[] args) {MyThread mt = new MyThread();mt.start();}}
Runnbale:可以通過實現Runnable接口來創建多線程,創建Runnable實現類的實例,并以此作為Thread的target來創建Thread對象,該Thread對象才是真正的線程對象。
package org.github.lujiango;public class Test11 {static class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("I am implement Runnable...");}}public static void main(String[] args) {Thread t = new Thread(new MyRunnable());t.start();}}
Callable:從Java 5開始,Java提供了Callable接口,提供了一個call方法可以作為線程執行體,但是call方法可以有返回值,可以聲明拋出異常。Java5提供了Future接口來代表call方法的返回值,并為Future提供了一個FutureTask實現類,該實現類實現了Future和Runnable。
package org.github.lujiango;import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;public class Test12 {static class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {return "my callable";}}public static void main(String[] args) throws InterruptedException, ExecutionException {MyCallable callable = new MyCallable();FutureTask<String> future = new FutureTask<String>(callable);new Thread(future).start();System.out.println(future.get());}}創建線程的三種方式比較:
通過繼承Thread類或實現Runnable,Callable接口都可以實現多線程。?
采用Runnable,Callable接口的方式創建多線程?
(1)線程類只是實現了Runnable接口或Callable接口,還可以繼承其它類。?
(2)多線程可以共享一個target對象,所以合適多個相同線程來處理同一份資源的情況,從而可以將CPU,代碼和數據分開,形成清晰的模型,較好的體現了面向對象的思想。?
(3)編程稍微復雜,如果需要訪問當前線程,則必須使用Thread.currentThread()方法?
采用繼承Thread類的方法創建多線程?
(1)因為多線程類已經繼承了Thread類,所以不能在繼承其它父類。?
(2)編寫簡單,如果需要訪問當前線程,則無須使用Thread.currentThread()方法,直接使用this即可獲得當前線程。
轉載于:https://www.cnblogs.com/lujiango/p/7581003.html
總結
以上是生活随笔為你收集整理的多线程-Thread、Runnable、Callbale、Future的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 创建桌面快捷方式
- 下一篇: SpringCloud(第 016 篇)