java - 多線程,鎖

 

1.繼承Thread
  * 定義類繼承Thread
  * 重寫run方法
  * 把新線程要作的事寫在run方法中
  * 建立線程對象
  * 開啓新線程, 內部會自動執行run方法


  public class Demo2_Thread {
    public static void main(String[] args) {
      MyThread mt = new MyThread();    //4,建立自定義類的對象
      mt.start();    //5,開啓線程

      for(int i = 0; i < 3000; i++) {
      System.out.println("bb");
      }
    }
  }
  class MyThread extends Thread {    //1,定義類繼承Thread
    public void run() {    //2,重寫run方法
    for(int i = 0; i < 3000; i++) {    //3,將要執行的代碼,寫在run方法中
    System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
  }
}html

 

* 2.實現Runnable
  * 定義類實現Runnable接口
  * 實現run方法
  * 把新線程要作的事寫在run方法中
  * 建立自定義的Runnable的子類對象
  * 建立Thread對象, 傳入Runnable
  * 調用start()開啓新線程, 內部會自動調用Runnable的run()方法ide

  public class Demo3_Runnable {
    public static void main(String[] args) {
      MyRunnable mr = new MyRunnable();    //4,建立自定義類對象
      //Runnable target = new MyRunnable();
      Thread t = new Thread(mr);    //5,將其看成參數傳遞給Thread的構造函數
      t.start();    //6,開啓線程

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

  class MyRunnable implements Runnable {    //1,自定義類實現Runnable接口
    @Override
    public void run() {    //2,重寫run方法
      for(int i = 0; i < 3000; i++) {    //3,將要執行的代碼,寫在run方法中
        System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
      }
    }
  }函數

 

 

匿名內部類:post

 

 

 

 

Java中守護線程的總結

  在Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護線程) this

  用個比較通俗的好比,任何一個守護線程都是整個JVM中全部非守護線程的保姆:url

  只要當前JVM實例中尚存在任何一個非守護線程沒有結束,守護線程就所有工做;只有當最後一個非守護線程結束時,守護線程隨着JVM一同結束工做。spa

  Daemon的做用是爲其餘線程的運行提供便利服務,守護線程最典型的應用就是 GC (垃圾回收器),它就是一個很稱職的守護者。.net

  User和Daemon二者幾乎沒有區別,惟一的不一樣之處就在於虛擬機的離開:若是 User Thread已經所有退出運行了,只剩下Daemon Thread存在了,虛擬機也就退出了。 由於沒有了被守護者,Daemon也就沒有工做可作了,也就沒有繼續運行程序的必要了。線程

Java中join()方法的理解

  thread.Join把指定的線程加入到當前線程,能夠將兩個交替執行的線程合併爲順序執行的線程。3d

  好比在線程B中調用了線程A的Join()方法,直到線程A執行完畢後,纔會繼續執行線程B。

  t.join();      //調用join方法,等待線程t執行完畢

  t.join(1000);  //等待 t 線程,等待時間是1000毫秒。

 

Java線程中yield()的用法

  Thread.yield()方法的做用:暫停當前正在執行的線程,並執行其餘線程。(可能沒有效果)

  yield()讓當前正在運行的線程回到可運行狀態,以容許具備相同優先級的其餘線程得到運行的機會。所以,使用yield()的目的是讓具備相同優先級的線程之間可以適當的輪換執行。可是,實際中沒法保證yield()達到讓步的目的,由於,讓步的線程可能被線程調度程序

再次選中。

  結論:大多數狀況下,yield()將致使線程從運行狀態轉到可運行狀態,但有可能沒有效果。

 

 

 

 

 鎖對象要惟一的, this表明實例這個對象,每一個線程都會實例對象,致使不是惟一。 類.class 惟一

相關文章
相關標籤/搜索