import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class NewThreadDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//第一種方式
Thread t1 = new Thread(){
@Override
public void run() {
System.out.println("new Thread 1");//輸出:new Thread 1
}
};//建立線程
t1.start();//啟動線程
System.out.println(t1.getName());//輸出:Thread-0
//第二種方式
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("new Thread 2");//輸出:new Thread 2
}
});
t2.start();
System.out.println(Thread.currentThread().getName());//輸出:main
//第三種方式
FutureTask<String> ft = new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("new Thread 3");//輸出:new Thread 3
return "aaaa";
}
});
Thread t3 = new Thread(ft);
t3.start();
String result = ft.get();
System.out.println(result);//輸出:aaaa
}
}
首先要明白什麼是線程?
明白線程之前要明白什麼是程序?
程序是什麼呢? 程序是計算機中運作的一個應用程式.
線程:執行該程序的邏輯單元. 線程是用來執行程序的.
Java中萬物皆對象,線程也被描述成了一個對象就是Thread對象.
Java對多線程的支援也是特别完善的,特别是JDK1.5之後.
首先明白什麼是線程? 什麼是程序?
程序就是計算機中運作的一個應用程式. 線程就是執行該程序的邏輯單元.
線程管理:
建立線程的方式:
1.繼承Thread類,并複寫run方法,建立該類對象,調用start方法開啟線程。
2.實作Runnable接口,複寫run方法,建立Thread類對象,将Runnable子類對象傳遞給Thread類對象。調用start方法開啟線程。
第二種方式好,将線程對象和線程任務對象分離開。降低了耦合性,利于維護
3.建立FutureTask對象,建立Callable子類對象,複寫call(相當于run)方法,将其傳遞給FutureTask對象(相當于一個Runnable)。
建立Thread類對象,将FutureTask對象傳遞給Thread對象。調用start方法開啟線程。這種方式可以獲得線程執行完之後的傳回值。
第三種使用Runnable功能更加強大的一個子類.這個子類是具有傳回值類型的任務方法.
第一種和第二種兩種方式是run()方法運作完是沒有傳回值的.
線程的資訊:
public class ThreadInfo {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (ThreadInfo.class) {
System.out.println("Thread");
}
}
});
t1.start();
System.out.println(t1.getId());
System.out.println(t1.getName());
System.out.println(t1.getPriority());//優先級 1-10
System.out.println(t1.getState());//線程狀态: NEW TERMINATED RUNNABLE TIMED_WAITING WAITING BLOCKED
}
}