多線程(01)
創(chuàng)建線程方法一
package com.kuang.ThreadLesson;
實現(xiàn)多線程同步下載圖片
package com.kuang.ThreadLesson;
?
import org.apache.commons.io.FileUtils;
?
import java.io.File;
import java.io.IOException;
import java.net.URL;
?
創(chuàng)建多線程方法二
小結(jié)
-
繼承Thread類
-
子類繼承Thread類具備多線程能力
-
啟動線程:子類對象.start()
-
不建議使用:避免OPP單繼承局限性
-
實現(xiàn)Runnable接口
-
實現(xiàn)接口Runnable具有多線程能力
-
啟動線程:傳入目標(biāo)對象+Thread對象.start()
-
推薦使用:避免單繼承局限性,靈活方便,方便同一個對象被多個線程使用
多個線程同時操作同一個對象
package com.kuang.ThreadLesson;
?
龜兔賽跑
package com.kuang.ThreadLesson;
?
實現(xiàn)Callable接口
-
實現(xiàn)Callable接口,需要返回值類型
-
重寫call方法,需要拋出異常
-
創(chuàng)建目標(biāo)對象
-
創(chuàng)建執(zhí)行服務(wù):ExecutorService ser = Executors.newFixedThreadPool(1);
-
提交執(zhí)行:Future<Boolean> result1 = ser.submit(t1);
-
獲取結(jié)果:boolean r1 = result.get();
-
關(guān)閉服務(wù):ser.shutdownNow();
package com.kuang.Demo02;
?
import jdk.nashorn.internal.codegen.CompilerConstants;
import org.apache.commons.io.FileUtils;
?
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.*;