創建線程的方式三種:
1 package cn.crxy.newThread; 2 3 import java.util.concurrent.Callable; 4 import java.util.concurrent.ExecutionException; 5 import java.util.concurrent.FutureTask; 6 7 public class NewThreadDemo { 8 9 public static void main(String[] args) throws InterruptedException, ExecutionException { 10 //第一種方式 11 Thread t1 = new Thread(){ 12 13 @Override 14 public void run() { 15 System.out.println("new Thread 1");//輸出:new Thread 1 16 } 17 };//創建線程 18 19 t1.start();//啟動線程 20 System.out.println(t1.getName());//輸出:Thread-0 21 22 //第二種方式 23 Thread t2 = new Thread(new Runnable() { 24 25 @Override 26 public void run() { 27 System.out.println("new Thread 2");//輸出:new Thread 2 28 } 29 }); 30 31 t2.start(); 32 33 System.out.println(Thread.currentThread().getName());//輸出:main 34 35 36 //第三種方式 37 FutureTask<String> ft = new FutureTask<String>(new Callable<String>() { 38 39 @Override 40 public String call() throws Exception { 41 System.out.println("new Thread 3");//輸出:new Thread 3 42 return "aaaa"; 43 } 44 }); 45 46 Thread t3 = new Thread(ft); 47 t3.start(); 48 String result = ft.get(); 49 System.out.println(result);//輸出:aaaa 50 51 } 52 }
首先要明白什么是線程?
明白線程之前要明白什么是進程?
進程是什么呢? 進程是計算機中運行的一個應用程序.
線程:執行該進程的邏輯單元. 線程是用來執行進程的.
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()方法運行完是沒有返回值的.
線程的信息:
1 public class ThreadInfo { 2 3 public static void main(String[] args) { 4 5 Thread t1 = new Thread(new Runnable() { 6 7 @Override 8 public void run() { 9 synchronized (ThreadInfo.class) { 10 System.out.println("Thread"); 11 } 12 } 13 }); 14 15 t1.start(); 16 17 18 System.out.println(t1.getId()); 19 System.out.println(t1.getName()); 20 System.out.println(t1.getPriority());//優先級 1-10 21 System.out.println(t1.getState());//線程狀態: NEW TERMINATED RUNNABLE TIMED_WAITING WAITING BLOCKED 22 } 23 }