java 建立執行緒的三種方法
阿新 • • 發佈:2018-11-19
在java中使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項,建立執行緒有三種方式:
1.通過繼承Thread類建立執行緒;
2.通過實現Runnable介面建立執行緒;
3.通過使用Callable和Future建立執行緒。
建立執行緒demo
1.繼承Thread類建立執行緒:定義子類繼承Thread類 -> 重寫該子類的run()方法,run()方法的方法體即執行緒需要執行的任務 -> 建立Thread子類的例項(建立執行緒物件) -> 呼叫執行緒start()方法,啟動執行緒。
如:建立兩個執行緒,分別輸出1~10.
public class ThreadTest { public static void main(String[] args){ Thread t1 = new MyThread(); Thread t2 = new MyThread(); t1.start(); t2.start(); } } class MyThread extends Thread{ public void run(){ for(int i = 1; i <= 10; i++){ System.out.println(i); System.out.println(Thread.currentThread()); } } }
2.實現Runnable介面建立執行緒:定義Runnable介面實現類 -> 重寫該類的run()方法 -> 建立Runnable實現類的例項 -> 建立Thread物件(真正的執行緒物件) -> 呼叫執行緒start()方法,啟動執行緒。這種方式將執行緒物件和執行緒任務物件分隔開,降低了耦合性,便於維護。
如:編寫一個執行緒,實現視窗顏色變化。
public class ThreadTest { public static void main(String[] args) throws InterruptedException { MyRunnable r = new MyRunnable(); r.setSize(200, 200); r.setVisible(true); r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Thread thread = new Thread(r); thread.start(); } } class MyRunnable extends JFrame implements Runnable { public void run(){ int i = 0; JPanel panel = new JPanel(); panel.setSize(200, 200); this.setContentPane(panel); while (true){ i = i == 0 ? 1 : 0; if(i == 0){ panel.setBackground(Color.BLACK); }else { panel.setBackground(Color.WHITE); } } } }
3.使用Callable和Future建立執行緒:定義Callable介面實現類 -> 重寫call()方法 -> 建立該實現類例項 -> 使用Future Task類包裝Callable物件 -> 建立Thread物件 -> 呼叫執行緒start()方法,啟動執行緒 -> 呼叫FutureTask物件get()方法獲得子執行緒執行結束後的返回值。
public class ThreadTest {
public static void main(String[] args){
MyCallableThread ct = new MyCallableThread();
FutureTask<Integer> ft = new FutureTask<Integer>(ct);
try {
//獲取執行緒返回值
System.out.println("子執行緒的返回值:" + ft.get());
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
class MyCallableThread implements Callable<Integer> {
public Integer call() throws Exception{
int i;
for(i = 1; i <= 10; i++){
System.out.println(i);
}
return i;
}
}