創(chuàng)建線程的兩種方式及靜態(tài)代理

創(chuàng)建線程有兩種方式一種是繼承Thread類另一種是繼承Runnable接口實(shí)現(xiàn)靜態(tài)代理。

1.繼承Thread方式:

public class MyThread extends Thread {
    @Override
    public void run(){
        super.run();
        System.out.println("MyThread");
    }
}
public class Run {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("運(yùn)行結(jié)束");
    }
}

1)創(chuàng)建一個(gè)類繼承Thread類,
2)改寫run()方法,
3)再對(duì)象.start()。

2.靜態(tài)代理方法實(shí)現(xiàn)(實(shí)現(xiàn)Runnable接口):由程序員創(chuàng)建或工具生成代理類的源碼,再編譯代理類。所謂靜態(tài)也就是在程序運(yùn)行前就已經(jīng)存在代理類的字節(jié)碼文件,代理類和委托類的關(guān)系在運(yùn)行前就確定了。

1)首先靜態(tài)代理包含了兩個(gè)角色:代理角色和真實(shí)(委托)角色,
2)上述兩個(gè)角色必需實(shí)現(xiàn)同一個(gè)接口,
3)代理角色要持有真實(shí)角色的引用,代理角色中要有方法供代理角色中的的真實(shí)角色指向之后生成的實(shí)例對(duì)象。代理角色里還有一些方法是委托方法
4)創(chuàng)建一個(gè)真實(shí)對(duì)象和一個(gè)代理對(duì)象,將真實(shí)對(duì)象賦給代理對(duì)象進(jìn)行操作,但是操作的還是真實(shí)對(duì)象自己。

推薦使用實(shí)現(xiàn)Runnable接口:避免單繼承,方便共享資源。

1>代理接口

/**  
 * 代理接口。處理給定名字的任務(wù)。 
 */  
public interface Subject {  
  /** 
   * 執(zhí)行給定名字的任務(wù)。 
    * @param taskName 任務(wù)名 
   */  
   public void dealTask(String taskName);   
}  

2>委托類,具體處理業(yè)務(wù)。

/** 
 * 真正執(zhí)行任務(wù)的類,實(shí)現(xiàn)了代理接口。 
 */  
public class RealSubject implements Subject {  
  
 /** 
  * 執(zhí)行給定名字的任務(wù)。這里打印出任務(wù)名,并休眠500ms模擬任務(wù)執(zhí)行了很長(zhǎng)時(shí)間 
  * @param taskName  
  */  
   @Override  
   public void dealTask(String taskName) {  
      System.out.println("正在執(zhí)行任務(wù):"+taskName);  
      try {  
         Thread.sleep(500);  
      } catch (InterruptedException e) {  
         e.printStackTrace();  
      }  
   }  
}  

3>靜態(tài)代理類

/** 
 * 代理類,實(shí)現(xiàn)了代理接口。 
 */  
public class ProxySubject implements Subject {  
 //代理類持有一個(gè)委托類的對(duì)象引用  
 private Subject delegate;  
   
 public ProxySubject(Subject delegate) {  
  this.delegate = delegate;  
 }  
  
 /** 
  * 將請(qǐng)求分派給委托類執(zhí)行,記錄任務(wù)執(zhí)行前后的時(shí)間,時(shí)間差即為任務(wù)的處理時(shí)間 
  *  
  * @param taskName 
  */  
 @Override  
 public void dealTask(String taskName) {  
  long stime = System.currentTimeMillis();   
  //將請(qǐng)求分派給委托類處理  
  delegate.dealTask(taskName);  
  long ftime = System.currentTimeMillis();   
  System.out.println("執(zhí)行任務(wù)耗時(shí)"+(ftime - stime)+"毫秒");    
 }  
}  

4>生成靜態(tài)代理類工廠

public class SubjectStaticFactory {  
 //客戶類調(diào)用此工廠方法獲得代理對(duì)象。  
 //對(duì)客戶類來說,其并不知道返回的是代理類對(duì)象還是委托類對(duì)象。  
 public static Subject getInstance(){   
  return new ProxySubject(new RealSubject());  
 }  
}  

5>客戶類

public class Client1 {  
 public static void main(String[] args) {  
  Subject proxy = SubjectStaticFactory.getInstance();  
  proxy.dealTask("DBQueryTask");  
 }   
}  

3.通過過實(shí)現(xiàn)Runnable接口實(shí)現(xiàn)靜態(tài)代理從而開啟多線程:

把Thread當(dāng)成代理類創(chuàng)建main和thread兩個(gè)線程

public class Run {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        Thread thread = new Thread(myThread);
        thread.start();
        for (int i =0;i<10000;i++){
            System.out.println(i);
        }
    }
}

委托類實(shí)現(xiàn)接口

public class MyThread implements Runnable{
    public void run() {
        for (int i = 0;i<10000;i++){
            System.out.println("rua");
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,806評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評(píng)論 19 139
  • 1、代理概念 為某個(gè)對(duì)象提供一個(gè)代理,以控制對(duì)這個(gè)對(duì)象的訪問。 代理類和委托類有共同的父類或父接口,這樣在任何使用...
    孔垂云閱讀 7,956評(píng)論 4 54
  • 三種模式的通俗定義: 1、O2O:線下(實(shí)體店)體驗(yàn),線上(電商平臺(tái))購買; 2、F2C:從工廠直接到消費(fèi)者,省去...
    A龍軍英閱讀 964評(píng)論 0 1
  • 今天和一歲視頻,后來她說到,婚后雙方關(guān)系如何取決于丈母娘的態(tài)度。 我笑她結(jié)婚還不到一年就成了婚戀專家。 我現(xiàn)在開始...
    傅五歲閱讀 185評(píng)論 4 0

友情鏈接更多精彩內(nèi)容