蘋果讓使用者自行修理 iPhone,股價應聲上漲 1.65%
阿新 • • 發佈:2021-11-21
繼承Thread類
package com.student_thread.demo; public class TestThread1 extends Thread {//繼承執行緒 類使我們自己創造的類也變成執行緒類 @Override public void run(){ for (int i = 0; i < 10; i++) { System.out.println("我在學程序"+i); } } //main執行緒、主執行緒 public static void main(String[] args) {//建立一個執行緒物件 TestThread1 testThread1=new TestThread1(); //testThread1.start();//用start方法開啟執行緒,主執行緒和子執行緒的執行順序在任務多的時候會交替執行 testThread1.start();//用run方法來開啟執行緒,就會優先執行主執行緒,主執行緒和子執行緒的執行順序即便在任務多的時候也是先執行完主執行緒再子執行緒 // java裡面的執行緒沒有主和子的分別,但是有優先順序的區別 for (int i = 0; i < 20; i++) { System.out.println("我在學程式設計"+i); } } }
實現Runnable介面
package com.student_thread.demo; public class TestThread3 implements Runnable {//這裡沒有繼承Thread是因為在後面使用了Thread執行緒類物件 @Override public void run(){ for (int i = 0; i < 10; i++) { System.out.println("我在學程序"+i); } }//main執行緒、主執行緒 public static void main(String[] args) { //建立一個執行緒物件 TestThread3 testThread3=new TestThread3(); //建立執行緒物件,通過執行緒物件來開啟我們的執行緒,代理 //16 Thread thread=new Thread();//雖然我們沒有建Thread這個類,但是這個類並不需要我們自己建,這個是系統的執行緒類 //17 thread.start(); //16、17可以簡化為: new Thread(testThread3).start();//將例項化物件直接作為引數傳入執行緒並啟動 //testThread3.start();//用start方法開啟執行緒,主執行緒和子執行緒的執行順序在任務多的時候會交替執行 // testThread3.run();//用run方法來開啟執行緒,就會優先執行主執行緒,主執行緒和子執行緒的執行順序即便在任務多的時候也是先執行完主執行緒再子執行緒 // java裡面的執行緒沒有主和子的分別,但是有優先順序的區別 for (int i = 0; i < 20; i++) { System.out.println("我在學程式設計"+i); } } }
實現callable介面
package com.student_thread.demo2; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; //第三種建立執行緒方法三,實現callable介面 public class TestCallable implements Callable<Boolean> { String url; String name; public TestCallable(String url,String name){ this.url=url; this.name=name; } //執行緒執行體 @Override public Boolean call() { WebDownloader webDownloader =new WebDownloader(); webDownloader.downloader(url,name); System.out.println("下載了檔案"+name); return true; } public static void main(String[] args) throws Exception,InterruptedException{ com.student_thread.demo.TestThread2 T1=new com.student_thread.demo.TestThread2("http://120.26.163.133/img/img.png","img.png"); com.student_thread.demo.TestThread2 T2=new com.student_thread.demo.TestThread2("http://120.26.163.133/img/profile.jpg","profile.png"); //建立執行服務 ExecutorService ser = Executors.newFixedThreadPool(2); //提交執行 Future<Boolean> r1 = (Future<Boolean>) ser.submit(T1); Future<Boolean> r2 = (Future<Boolean>) ser.submit(T2); //獲取結果 boolean rs1 = r1.get(); boolean rs2 = r2.get(); System.out.println(rs1); System.out.println(rs2); //關閉服務 ser.shutdownNow(); } //下載器 class WebDownloader{ public void downloader(String url,String name){ try { FileUtils.copyURLToFile(new URL(url),new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("io異常,downloader出現問題"); } } } }