qileilove

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

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

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

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

            為什么要用多線程

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

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

            3,多線程可以讓程序"同時(shí)"處理多個(gè)事情。

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

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

            方式一步驟:繼承Thread類

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

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

            通過(guò)調(diào)用start方法開(kāi)啟線程。

          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方法。

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

            Thread類對(duì)象調(diào)用start方法開(kāi)啟線程。

          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)建方式的對(duì)比

            Runnable接口相對(duì)于繼承Thread類的好處:

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

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

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

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

            同步代碼塊

            1)同步的前提:

            A.必須有兩個(gè)或兩個(gè)以上的線程

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

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

          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) 評(píng)論(0)  編輯  收藏


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


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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 禹州市| 申扎县| 七台河市| 宝应县| 万全县| 自贡市| 延长县| 临邑县| 乌恰县| 环江| 克东县| 广州市| 蕉岭县| 德钦县| 阿坝县| 天等县| 潞城市| 卢龙县| 门源| 洱源县| 河南省| 梁河县| 青田县| 华亭县| 桓台县| 永宁县| 衡阳县| 广德县| 盈江县| 阜新市| 宁明县| 定远县| 马山县| 敦煌市| 武安市| 本溪市| 靖江市| 仙游县| 都昌县| 浦江县| 天长市|