java线程方法_Java线程的三种方式
創(chuàng)建線程有三種方式:
1.繼承Thread類
2.實(shí)現(xiàn)Runnable接口
3.使用Callable和Future創(chuàng)建線程
三種方式詳解如下:
---------------------------------------------------------------------------
1.繼承Thread類創(chuàng)建線程類
(1).重寫run()方法,run()方法即是線程的執(zhí)行體
(2).實(shí)例化線程類
(3).調(diào)用start()方法,啟動線程
代碼示例:
public class MyThread extendsThread {int i = 0;public voidrun() {for(; i <= 50;i++) {
System.out.println(getName()+i);
}
}public static voidmain(String args[]) {for(int i=0;i <= 50;i++) {if(i == 10) {
MyThread myThread= newMyThread();
myThread.start();
}
}
}
}
2.創(chuàng)建實(shí)現(xiàn)Runnable接口的線程類:
(1)重寫run()方法,run()方法是線程的執(zhí)行體
(2)創(chuàng)建線程類的實(shí)例,并以該實(shí)例為對象創(chuàng)建Thread類的實(shí)例,Thread類對象才是真正的線程對象
(3)通過Thread對象調(diào)用start()方法,啟動線程
代碼示例:
public class MyRunnable implementsRunnable {private inti;
@Overridepublic voidrun() {//TODO Auto-generated method stub
for(int i=0; i<=50;i++) {
System.out.println(Thread.currentThread().getName()+i);
}
}public static voidmain(String args[]) {
MyRunnable myRunnable= newMyRunnable();
Thread thread= new Thread(myRunnable, "new Thread");
thread.start();
}
}
3.通過Callable和Future創(chuàng)建線程:
(1)創(chuàng)建Callable接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)call()方法,該call()方法將作為線程執(zhí)行體,并且有返回值。
(2)創(chuàng)建Callable實(shí)現(xiàn)類的實(shí)例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值
(3)使用FutureTask對象作為Thread對象的參數(shù)創(chuàng)建并啟動新線程
(4)調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值
代碼示例:
importjava.util.concurrent.Callable;importjava.util.concurrent.FutureTask;public class CallableThread implements Callable{
@Overridepublic Integer call() throwsException {//TODO Auto-generated method stub
int i = 0;for(;i<=50;i++) {
System.out.println(Thread.currentThread().getName()+i);
}returni;
}public static voidmain(String args[]) {
CallableThread ct= newCallableThread();
FutureTask ft = new FutureTask<>(ct);for(int i=0;i <= 50;i++) {new Thread(ft,"返回線程").start();
}try{
System.out.println("線程的返回值:" +ft.get());
}catch(Exception e) {//TODO: handle exception
e.printStackTrace();
}
}
}
通過以上的代碼實(shí)例,我們可以看到:
基于Runnablehe和Callable接口實(shí)現(xiàn)的線程類比較靈活,可繼承其他類,適合多個線程處理同一個資源的情況,但與此同時代碼較復(fù)雜,訪問當(dāng)前線程時要使用Thread.currentThread()方法。
而繼承Thread實(shí)現(xiàn)的線程類在訪問當(dāng)前線程時只使用this即可訪問,但因?yàn)槔^承了Thread類,不能再繼承其他類
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的java线程方法_Java线程的三种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python selenium爬虫豆瓣_
- 下一篇: java类和对象实例对象_Java类、对