JAVA總結(jié)(一)

成員變量,類變量,局部變量,參數(shù)

  • 成員變量和局部變量
    成員變量在類中定義,存在于堆內(nèi)存中的,有默認的初始值。
例如:String null;
          int 0;
          boolean false;

局部變量定義在方法中,即 方法名(局部變量,也叫參數(shù)列表),存在于棧內(nèi)存中,沒有默認的初始值,必須初始化,不然無法訪問,方法出棧,局部變量隨之消失

  • 成員變量分為實例變量和類變量
    實例變量:取決于類的實例,每創(chuàng)建一個實例,Java會為該類的實例變量分配一次內(nèi)存,而實例變量則屬對象私有,某一個對象將其值改變,不影響其他對象
    類變量(static所修飾的成員變量):
    類的靜態(tài)成員變量在內(nèi)存中只有一個,可以直接通過調(diào)用類名來調(diào)用,隨著類的加載而加載,類變量是所有對象共有,其中一個對象將它值改變,其他對象得到的就是改變后的結(jié)果

線程

創(chuàng)建多線程:繼承Thread類,實現(xiàn)Runnable接口

繼承Thread類
  1. 步驟:聲明Thread類的子類,在子類中重新定義run()方法,創(chuàng)建Thread子類的實例,讓線程調(diào)用start()方法
  2. 注意:用戶不能直接調(diào)用Thread類中的run()方法,需要通過調(diào)用Thread類提供的start()成員方法間接的使用它。通過調(diào)用start()方法初始化后,才能調(diào)用run()方法。run()成員方法執(zhí)行完畢后線程就結(jié)束,并且不能再次啟動
繼承Thread子類,創(chuàng)建線程對象。要求創(chuàng)建兩個線程對象,分別實現(xiàn)顯示‘A'~'D'五個字符的功能
class ThreadOne extends Thread{
    public void run(){
          for(char s = 'A';s<'F';s++){
                System.out.println("正在運行線程“ + getName() +"打印字符為"+s);
        }
        System.out.println();
        System.out.println("線程"+Thread.currentThread().getName+"執(zhí)行結(jié)束,退出");
    }
}
public class Test{
    public static void main(String args[]){
        Thread t1 = new ThreadOne();
        t1.setName("T1");
        Thread t2 = new ThreadOne();
        t2.setName("T2");
        t1.start();
        t2.start();
        System.out.println("主線程"+Thread.currentThread().getName()+"創(chuàng)建兩個子線程完畢,退出");
    }
}
實現(xiàn)Runnable()接口
  1. 步驟:定義一個實現(xiàn)了Runnable接口的類,在類中重載run()方法,定義線程體;創(chuàng)建一個上述類的類對象,以該對象為參數(shù)創(chuàng)建一個Thread類對象;調(diào)用Thread類對象的start()方法,啟動線程
class ThreadTwo{
      int i;
      public void run(){
          for(int i=1;i<=10;i++){
              System.out.println("ThreadTwo by Runnable Interface is running ……” + s);
          }
      }
 }
public class Test{
    public static void main(String args[]){
          ThreadTwo thread = new ThreadTwo();
          Thread threadObj = new Thread(thread);
          threadObj.start();
    }
}
線程狀態(tài)及優(yōu)先級
  • 新建狀態(tài)
    利用new運算符創(chuàng)建線程對象之后,調(diào)用start()方法之前就是線程的新建狀態(tài)。這時,線程僅僅是一個空對象,系統(tǒng)沒有為他分配資源
  • 可運行狀態(tài)
    使用start()方法啟動一個線程之后,線程就變成可運行狀態(tài)
  • 阻塞狀態(tài)
    當一個正在CPU上運行的線程由于等待某個事件發(fā)生而讓出CPU時,就進入阻塞狀態(tài)。例如,調(diào)用了sleep()或者wait()成員方法,或者等待I/O設(shè)備資源就緒等。當?shù)却臅r間發(fā)生后,或得到了需要的資源后進程就會重新變?yōu)榭蛇\行狀態(tài)
  • 死亡狀態(tài)
    是線程生命周期的最后一個階段,處于這個狀態(tài)的線程不在具有執(zhí)行的能力。正常運行的線程完成了全部工作或者線程的執(zhí)行被強行終止都可導致線程處于死亡狀態(tài)。
  • 線程的優(yōu)先級及調(diào)度
    通過調(diào)用Thread類的setPriority()方法改變線程的優(yōu)先級,getPriority()方法獲得該線程的優(yōu)先級
線程控制
  • Java的互斥鎖機制
    java中的關(guān)鍵字synchronized用來與對象的互斥鎖聯(lián)系。當某個對象用synchronized修飾時,表明該對象在任一時刻只能有一個線程進行訪問。
    兩種用法:Synchronized方法和Synchronized塊

1.Synchronized方法——方法同步
講synchronized關(guān)鍵字放在方法錢用于鎖定一個方法,聲明該方法為互斥使用的方法。方法體成為臨界區(qū)。

  • 聲明格式:
    synchronized<方法聲明>{
    <方法體>
    }

    <方法聲明>{
    synchronized(this){
    <方法體>
    }
    }
例如:用其修飾sale()方法,使其成為一個臨界區(qū)
class Booking{
    private int amount = 90;
    public synchronized void sale(int num){
        ……
  }
}

2.synchronized塊——對象同步
將Synchronized關(guān)鍵字放在某代碼塊之前,可以使該代碼塊成為互斥的代碼塊

  • 聲明格式:
    synchronized<對象名>{
    <代碼塊>
    }
例如:
public void run(){
      synchronized(bt){
         bt.sale(num);
    }
 }
  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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