qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          黑馬程序員--------Java多線程講解筆記

           進程:正在進行中的程序。 每一個進程執行都有一個執行順序,該順序是一個執行路徑,或者叫一個控制單元。

            線程:就是進程中一個執行單元或執行情景或執行路徑負責進程中程序執行的控制單元 。一個進程中至少要有一個線程。當一個進程中線程有多個時,就是多線程。

            為什么要用多線程

            1,讓計算機"同時"做多件事情,節約時間。

            2,后臺運行程序,提高程序的運行效率.。

            3,多線程可以讓程序"同時"處理多個事情。

            4,計算機CPU大部分時間處于空閑狀態,浪費了CPU資源。

            1.創建線程的兩種方式:

            方式一步驟:繼承Thread類

            子類覆蓋父類中的run方法,將線程運行的代碼存放在run中。

            建立子類對象的同時線程也被創建。

            通過調用start方法開啟線程。

          public class ThreadTest extends Thread{
           private int i;
           public void run() {
            for (i = 0; i < 100; i++)
             System.out.println(Thread.currentThread().getName() + "-------"+ i);
           }
           public static void main(String[] args) {
            Demo d1 = new Demo();
            Demo d2 = new Demo();
            d1.start();
            d2.start();
            for (int i = 0; i < 60; i++)
             System.out.println(Thread.currentThread().getName()+"----------" + i);
           }
          }

          方式二步驟:實現Runnable接口

            子類覆蓋接口中的run方法。

            通過Thread類創建線程,并將實現了Runnable接口的子類對象作為參數傳遞給Thread類的構造函數。

            Thread類對象調用start方法開啟線程。

          public class RunnableTest implements Runnable {

           private int num = 100;

           @Override
           public void run() {
            while (true) {
             if (num > 0) {
              try {
               Thread.sleep(100);
              } catch (InterruptedException e) {
               e.printStackTrace();
              }
              System.out.println(Thread.currentThread().getName() + "----->"
                + num--);
             } else {
              break;
             }
            }
           }

           public static void main(String args[]) {
            RunnableTest rt = new RunnableTest();
            Thread t1 = new Thread(rt, "新線程1");
            Thread t2 = new Thread(rt, "新線程2");
            Thread t3 = new Thread(rt, "新線程3");
            t1.start();
            t2.start();
            t3.start();
           }

            2.兩種創建方式的對比

            Runnable接口相對于繼承Thread類的好處:

            1.適合多個相同程序代碼的線程去處理同意資源的情況,把虛擬CPU(線程)同程序的代碼,數據有效分離,較好的體現了面向對象的設計思想。

            2.可以避免由于java的單繼承特點帶來的局限。當我們要將已經繼承了某一個類的子類放入多線程中,由于一個類不能同時有兩個父類,所以只能使用Runnable接口方法。

            3.有力與程序的健壯性,代碼能給被多個線程共享,代碼與數據是獨立的。

           線程的四種狀態及其轉換

            同步代碼塊

            1)同步的前提:

            A.必須有兩個或兩個以上的線程

            B.必須保證同步的線程使用同一個鎖。必須保證同步中只能有一個線程在運行。

            好處與弊端:解決了多線程的安全問題。多個線程需要判斷鎖,較為消耗資源。

          public class RunnableTest implements Runnable {

           private int num = 100;
           Object obj = new Object();

           @Override
           public void run() {
            while (true) {
             synchronized (obj) {
              if (num > 0) {
               try {
                Thread.sleep(100);
               } catch (InterruptedException e) {
                e.printStackTrace();
               }
               System.out.println(Thread.currentThread().getName()
                 + "----->" + num--);
              } else {
               break;
              }
             }
            }
           }

           public static void main(String args[]) {
            RunnableTest rt = new RunnableTest();
            Thread t1 = new Thread(rt, "新線程1");
            Thread t2 = new Thread(rt, "新線程2");
            Thread t3 = new Thread(rt, "新線程3");
            t1.start();
            t2.start();
            t3.start();
           }

          }

          posted on 2013-09-05 10:25 順其自然EVO 閱讀(865) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 连江县| 铜鼓县| 且末县| 秦皇岛市| 兴隆县| 安多县| 新竹市| 鄂州市| 彝良县| 景宁| 定兴县| 葫芦岛市| 虎林市| 和林格尔县| 佛冈县| 诸暨市| 乌恰县| 东乡族自治县| 博野县| 三原县| 日照市| 延吉市| 敖汉旗| 宁陵县| 土默特右旗| 定边县| 兰西县| 昭平县| 教育| 宁化县| 色达县| 循化| 当涂县| 崇左市| 台湾省| 乌苏市| 通州区| 九龙城区| 阳曲县| 泊头市| 成安县|