這篇文章給大家分享的是有關Java如何創建線程的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Java創建線程主要有三種方式:繼承Thread類創建線程、實現Runnable接口創建線程和實現Callable和Future創建線程。
繼承Thread類
public class Thread1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(getName() + ": " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
if (i == 2) {
new Thread1().start();
new Thread1().start();
}
}
}
}實現Runnable接口
public class Thread2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
if (i == 2) {
Thread2 thread2 = new Thread2();
new Thread(thread2).start();
new Thread(thread2).start();
}
}
}
}實現Callable接口
FutureTask類包裝Callable對象時,封裝了Callable對象的call()方法的返回值。
class Thread3 implements Callable {
@Override
public Integer call() throws Exception {
int i = 0;
for (; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
}
return i;
}
public static void main(String[] args) {
Thread3 thread3 = new Thread3();
FutureTask<Integer> futureTask = new FutureTask<Integer>(thread3);
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " :" + i);
if (i == 2) {
new Thread(futureTask, "有返回值的線程").start();
}
}
try {
System.out.println("子線程返回值: " + futureTask.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}三種方式優缺點
采用實現接口(Runnable和Callable)的方式,線程類還可以繼承其他的類。實現接口的線程對象還可以用來創建多個線程,可以實現資源共享。缺點是不能使用this指針來獲取線程的名字等。
采用繼承Thread類的方式,線程不能繼承其他的類,但是Thread類中有getName方法,因為可以直接使用this.getName()來獲取當前線程的名字。
感謝各位的閱讀!關于“Java如何創建線程”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。