1. 程式人生 > >Java執行緒的建立方式

Java執行緒的建立方式

執行緒建立方式

  1. 直接繼承Thread
  2. 實現Runnable介面
  3. 實現Callable介面

方式一

執行緒的建立

package com.jimory.thread.create;

/**
* 執行緒建立(一) 
* 1、繼承Thread類
* 2、重寫run方法 , run方法裡是執行緒體
* 
* 執行緒使用
* 1、建立類物件
* 2、呼叫start方法(注意是 物件.start() 不能用物件.run()方法)
* 
* 模擬龜兔賽跑
* @author Jimory
*
*/
public class Rabbit extends
Thread{
@Override public void run() { for(int i=1;i<=100;i++){ System.out.println("兔子跑了"+i+"步"); } } } class Toritor extends Thread{ @Override public void run() { for(int i=1;i<=100;i++){ System.out.println("烏龜跑了"+i+"步"); } } }

執行緒的使用

package com.jimory.thread.create;

public class ThreadTest01 {

    /**
     * 這裡有三個執行緒,main方法也是一個執行緒,倆個start()倆個執行緒,共三個
     * 或者可以說是五個執行緒,另外倆個是異常和後臺jc
     * @param args
     */
    public static void main(String[] args) {
        Rabbit ra = new Rabbit();
        Toritor to = new Toritor();
        ra.start(); //啟動執行緒,注意不能通過呼叫run方法
to.start(); for(int i=1;i<=100;i++){ System.out.println("main方法"+i+"步"); } } }

方式二
優點:解決了方式一的單繼承問題,比如說某個類必須繼承另一個類,由於單繼承問題所以不能繼承Thread類,通過方式二的介面方式(這裡用到了靜態代理),推介使用

執行緒的建立

 package com.jimory.thread.create;

 /**
 * 執行緒建立(二)
 * 1、實現Runnable介面
 * 2、重寫run方法
 * 
 * 執行緒使用
 * 1、建立真實角色
 * 2、建立代理物件 + 引用(引用真實角色物件)
 * 2、代理物件.start()
 * @author Jimory
 *
 */
 public class Rabbit02 implements Runnable{

     @Override
     public void run() {
         for(int i=0;i<100;i++){
             System.out.println("hahahahhahaahha"+i);
         }

     }

執行緒的使用

 package com.jimory.thread.create;

 public class RunnableTest {
     public static void main(String[] args) {
         //建立真實角色
         Rabbit02 ra2 = new Rabbit02();
         //建立代理角色 + 引用
         Thread th = new Thread(ra2, "路人甲");
         //代理角色啟動執行緒
         th.start();

         for(int i=0;i<100;i++){
             System.out.println("eeee"+i);
         }
     }

方式三

 package com.jimory.thread.create;

 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;

 /**
 * 執行緒建立 較其他倆種建立方式,Callable介面可以返回值,可以丟擲異常
 * 1、類要實現Callable介面
 * 2、ExecutorService ser = Executors.newFixedThreadPool(1); 開啟幾個執行緒就pool就寫幾
 * 
 * 執行緒關閉
 * ser.shutdownNow();
 * @author Jimory
 *
 */
 public class Call{

     /**
      * 執行緒建立、關閉、獲取返回值例項
      */
     public static void main(String[] args) throws InterruptedException, ExecutionException {
         //建立執行緒
         ExecutorService ser = Executors.newFixedThreadPool(1);
         Race race = new Race();
         //獲取值
         Future<Integer> result = ser.submit(race);
         int num = result.get();
         System.out.println(num);
         //執行緒關閉
         ser.shutdownNow();

     }

 }

 class Race implements Callable<Integer>{

     @Override
     public Integer call() throws Exception {

         return 1000;