qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

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

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

            線程:就是進(jìn)程中一個執(zhí)行單元或執(zhí)行情景或執(zhí)行路徑負(fù)責(zé)進(jìn)程中程序執(zhí)行的控制單元 。一個進(jìn)程中至少要有一個線程。當(dāng)一個進(jìn)程中線程有多個時,就是多線程。

            為什么要用多線程

            1,讓計算機(jī)"同時"做多件事情,節(jié)約時間。

            2,后臺運(yùn)行程序,提高程序的運(yùn)行效率.。

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

            4,計算機(jī)CPU大部分時間處于空閑狀態(tài),浪費(fèi)了CPU資源。

            1.創(chuàng)建線程的兩種方式:

            方式一步驟:繼承Thread類

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

            建立子類對象的同時線程也被創(chuàng)建。

            通過調(diào)用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);
           }
          }

          方式二步驟:實(shí)現(xiàn)Runnable接口

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

            通過Thread類創(chuàng)建線程,并將實(shí)現(xiàn)了Runnable接口的子類對象作為參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。

            Thread類對象調(diào)用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.兩種創(chuàng)建方式的對比

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

            1.適合多個相同程序代碼的線程去處理同意資源的情況,把虛擬CPU(線程)同程序的代碼,數(shù)據(jù)有效分離,較好的體現(xiàn)了面向?qū)ο蟮脑O(shè)計思想。

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

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

           線程的四種狀態(tài)及其轉(zhuǎn)換

            同步代碼塊

            1)同步的前提:

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

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

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

          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 閱讀(869) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 栖霞市| 青浦区| 镇远县| 康乐县| 哈尔滨市| 巢湖市| 武义县| 论坛| 郸城县| 修文县| 怀仁县| 临猗县| 扎赉特旗| 沙雅县| 余江县| 错那县| 凉城县| 诸暨市| 青州市| 安庆市| 浦城县| 昌乐县| 杭锦后旗| 嘉义县| 梅河口市| 阿拉尔市| 北安市| 临汾市| 时尚| 台江县| 屏南县| 凤翔县| 广安市| 蓬莱市| 霸州市| 鹤山市| SHOW| 宁城县| 洞头县| 宜川县| 砚山县|