Android Day18 Java中

內(nèi)容

Ⅰ進程與線程

Ⅱ線程安全

Ⅲ賣票系統(tǒng)demo

具體內(nèi)容

Ⅰ進程與線程

1.(1)進程:正在運行的一個程序
系統(tǒng)會為這個進程分配獨立的內(nèi)存資源
(2)線程:具體執(zhí)行任務的最小單位
一個進程最少擁有一個線程(主線程 運行起來就執(zhí)行的線程)
線程之間是共享內(nèi)存資源的(進程申請的)
線程之間可以通信(數(shù)據(jù)傳遞:多數(shù)為主線程和子線程)

2.進程與線程的關系圖示


進程與線程的關系

3.為什么不使用多進程而是使用多線程豪诲?
線程廉價,線程啟動比較快,退出比較快,對系統(tǒng)資源的沖擊也比較小,而且線程彼此分享了大部分核心對象(File Handle)的擁有權
使用多重進程础浮,不可預期刹悴,且測試困難

4.為什么需要創(chuàng)建子線程
在主線程中存在有比較耗時的操作:下載視頻 上傳文件 數(shù)據(jù)處理
這些操作會阻塞主線程 后面的任務必須等這些任務執(zhí)行完畢之后才能執(zhí)行
為了不阻塞主線程垛孔,需要將耗時的任務放在子線程中去處理

5.創(chuàng)建一個子線程的方法
(1)定義一個類繼承于Thread 實現(xiàn)run方法
join:讓當前這個線程阻塞 等join的線程執(zhí)行完畢再執(zhí)行
setName:設置線程名稱
getName:獲取線程名稱
currentThread:獲取當前運行的線程對象
start:開啟任務
(2)實現(xiàn)Runnable接口 實現(xiàn)run方法
a.創(chuàng)建任務 創(chuàng)建類實現(xiàn)Runnable接口
b.使用Thread 為這個任務分配線程
c.開啟任務 start
(3)創(chuàng)建線程的同時提针,直接開啟線程任務命爬,不需要操作線程對象本身
(4)最簡潔的方式 - 使用Lambda表達式

Ⅱ線程安全

1.什么是線程安全
指的是確保在多條線程訪問的時候,我們的程序還能按照我們預期的行為去執(zhí)行

2.線程的狀態(tài)
NEW:新建 線程剛被創(chuàng)建好 至今尚未啟動的線程處于這種狀態(tài)
RUNNABLE:就緒狀態(tài)辐脖,只要搶到時間片就可以隨時運行這個線程饲宛,正在 Java 虛擬機中執(zhí)行的線程處于這種狀態(tài)
BLOCKED:阻塞狀態(tài) sleep wait
WAITING:等待 wait
TIMED_WAITING:限時等待一個正在限時等待另一個線程執(zhí)行一個動作的線程處于這一狀態(tài)
TERMINATED:終止,已退出的線程處于這種狀態(tài)

3.如何實現(xiàn)線程安全
(1)使用synchronized
synchronized關鍵字嗜价,就是用來控制線程同步的艇抠,保證我們的線程在多線程環(huán)境下,不被多個線程同時執(zhí)行久锥,確保我們數(shù)據(jù)的完整性家淤,使用方法一般是加在方法上
(2)使用Lock

4.同步鎖中await、signal和signalAll的使用
Condition實例被綁定在一個Lock的對象上瑟由,使用Lock對象的方法newCondition()獲取Condition的實例絮重。Condition提供了下面三種方法,來協(xié)調不同線程的同步:
await():導致當前線程等待歹苦,直到其他線程調用該Condition的signal()或signalAll()方法喚醒該線程
signal():喚醒在此Lock對象上等待的單個線程
signalAll():喚醒在此Lock對象上等待的所有線程

Ⅲ賣票系統(tǒng)demo

    public static void main(String[] args) {
    Ticket ticketCQ = new Ticket("重慶");
    Thread t1 = new Thread(ticketCQ);
    t1.start();

    Ticket ticketSH = new Ticket("上海");
    Thread t2 = new Thread(ticketSH);
    t2.start();
  }
}

//用于賣票的任務
class Ticket implements Runnable {
//定義所有車票的數(shù)量
public static int num = 100;
String name;

public Ticket(String name) {
    this.name = name;
}

static final Object obj = new Object();

//創(chuàng)建一個可重入的鎖
static ReentrantLock lock = new ReentrantLock();
Condition condition = lock.newCondition();

@Override
public void run() {
    for (int i = 1; i <= 100; i++) {
        //判斷有沒有票

        //加鎖
     //            synchronized (obj) {
        lock.lock();
            //需要同步的代碼
            if (num > 0) {
                System.out.println(name + "出票:" + num);
                num--;

//                    try {
//                        //當前線程等待
//                        obj.notify();
//                        obj.wait();
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    } finally {
//                        //通知其他線程執(zhí)行
//
//                    }
            } else {
                break;
            }
            //解鎖
            lock.unlock();
        }
    }
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末青伤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子殴瘦,更是在濱河造成了極大的恐慌狠角,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚪腋,死亡現(xiàn)場離奇詭異丰歌,居然都是意外死亡,警方通過查閱死者的電腦和手機辣吃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門动遭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人神得,你說我怎么就攤上這事厘惦。” “怎么了哩簿?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵宵蕉,是天一觀的道長。 經(jīng)常有香客問我节榜,道長羡玛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任宗苍,我火速辦了婚禮稼稿,結果婚禮上薄榛,老公的妹妹穿的比我還像新娘。我一直安慰自己让歼,他們只是感情好敞恋,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谋右,像睡著了一般硬猫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上改执,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天啸蜜,我揣著相機與錄音,去河邊找鬼辈挂。 笑死衬横,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的终蒂。 我是一名探鬼主播冕香,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼后豫!你這毒婦竟也來了?” 一聲冷哼從身側響起突那,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤挫酿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愕难,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體早龟,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年猫缭,在試婚紗的時候發(fā)現(xiàn)自己被綠了葱弟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡猜丹,死狀恐怖芝加,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情射窒,我是刑警寧澤藏杖,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站脉顿,受9級特大地震影響蝌麸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜艾疟,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一来吩、第九天 我趴在偏房一處隱蔽的房頂上張望敢辩。 院中可真熱鬧,春花似錦弟疆、人聲如沸戚长。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽历葛。三九已至,卻和暖如春嘀略,著一層夾襖步出監(jiān)牢的瞬間恤溶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工帜羊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咒程,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓讼育,卻偏偏與公主長得像帐姻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奶段,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的饥瓷,后來想想還是整...
    coder_pig閱讀 1,639評論 2 17
  • ??一個任務通常就是一個程序,每個運行中的程序就是一個進程痹籍。當一個程序運行時呢铆,內(nèi)部可能包含了多個順序執(zhí)行流,每個順...
    OmaiMoon閱讀 1,663評論 0 12
  • 【JAVA 線程】 線程 進程:是一個正在執(zhí)行中的程序蹲缠。每一個進程執(zhí)行都有一個執(zhí)行順序棺克。該順序是一個執(zhí)行路徑,或者...
    Rtia閱讀 2,761評論 2 20
  • 一线定、進程和線程 進程 進程就是一個執(zhí)行中的程序實例娜谊,每個進程都有自己獨立的一塊內(nèi)存空間,一個進程中可以有多個線程斤讥。...
    阿敏其人閱讀 2,611評論 0 13
  • 那時候的我纱皆,仗著他的堅強,欺負了他的堅強周偎。
    梨林居士閱讀 146評論 0 0