多線程及網(wǎng)絡編程

多線程
1.多線程的概述: 進程有多條執(zhí)行路徑,合稱為多線程.
進程:可執(zhí)行文件(程序).eg:exe文件
線程:進程的執(zhí)行路徑(執(zhí)行單元)
2.多線程并行和并發(fā)的區(qū)別
并行:
多個線程同時執(zhí)行.(前提是:需要多核CPU)
并發(fā):
多個線程同時請求執(zhí)行,但是同一瞬間,cpu只能執(zhí)行一個線程,于是安排這些線程交替執(zhí)行,由于時間間隔非常短,所以我們看起來是同一時間執(zhí)行的,其實并不是
3.多線程的實現(xiàn)方式
3.1繼承Thread類
步驟:

1.定義一個類(MyThread),繼承Thread類
2.重寫run()方法
3.把要執(zhí)行的代碼放入run方法中
4.創(chuàng)建線程對象
    MyThread  mt = new MyThread();
5.開啟線程
    mt.start();
  注意:
        1) 開啟線程, 調(diào)用的是Thread#start()方法.
         如果你調(diào)用的是run()方法, 那么只是普通的方法調(diào)用.
        2) 同一個線程對象不能重復開啟, 否則會報: IllegalThreadStateException(非法的線程狀態(tài)異常)

3.2實現(xiàn)Runnable接口

1.定義一個實現(xiàn)類(MyRunnable),實現(xiàn)Runnable接口
2.重寫run()方法
3.把要執(zhí)行的代碼放入run()方法中
4.創(chuàng)建Runnable接口的子類對象,將其作為參數(shù)傳入Thread類的構(gòu)造方法中,創(chuàng)建線程對象
    MyRunnable mr = new MyRunnable();
    Thread tr = new Thread(mr);
5.開啟線程
    tr.start();
  注意:
        1) 開啟線程, 調(diào)用的是Thread#start()方法.
        如果你調(diào)用的是run()方法, 那么只是普通的方法調(diào)用.
        2) 同一個線程對象不能重復開啟, 否則會報: IllegalThreadStateException(非法的線程狀態(tài)異常)

模擬買票案例:

public class MyRunnable implements Runnable{

    //定義變量,接收票數(shù)
    private static int tickets = 100;
    //重寫run()方法
    @Override
    public void run() {
        while (true){
            synchronized (this){   //加鎖,解決負數(shù)票以及重復票,鎖對象必須是同一把鎖,一般是本類的.class
            //本方法使用實現(xiàn)Runnable接口,可以使用this,因為只創(chuàng)建了一個本類對象
            //如果使用繼承Thread類方法實現(xiàn),不能使用this,需使用.class
                if(tickets<1){
                    break;
                }
                System.out.println(Thread.currentThread().getName()+"正在出售第"+ tickets-- + "張票!");
            }
        }
    }
}
//測試類
public class TestRunnable {
    public static void main(String[] args) {
        MyRunnable mr = new MyRunnable();

        Thread th1 = new Thread(mr,"一號窗口");
        Thread th2 = new Thread(mr,"二號窗口");
        Thread th3 = new Thread(mr,"三號窗口");
        Thread th4 = new Thread(mr,"四號窗口");

        th1.start();
        th2.start();
        th3.start();
        th4.start();
    }
}

4.Thread類中的成員總結(jié)

    構(gòu)造方法:
        public Thread();
        public Thread(String name);
        public Thread(Runnable target);
        public Thread(Runnable target, String name);
    
    成員方法:
        public void run();                      //里邊記錄的是多線程要執(zhí)行的代碼, 該方法會自動被start()方法調(diào)用.
        public void start();                    //開啟線程, 該方法會自動調(diào)用run().
        public String getName();                //獲取當前正在執(zhí)行的線程對象的名字.
        public void setName(String name);       //設置線程名
        public static Thread currentThread();   //獲取當前正在執(zhí)行的線程對象.
        public static void sleep(long millis);  //讓線程休眠指定的時間, 單位是: 毫秒.

網(wǎng)絡編程

1.概述:用來實現(xiàn)網(wǎng)絡互聯(lián)的,不同計算機上,運行的程序間,可以進行數(shù)據(jù)交互.
大白話講就是:用來在不同的設備之間進行數(shù)據(jù)傳輸?shù)?
網(wǎng)絡編程也叫套接字編程,也叫Socket編程
網(wǎng)絡模型(TCP/IP模型,7層):
物理層
數(shù)據(jù)鏈路層
傳輸層
網(wǎng)絡層
表示層
會話層
應用層
網(wǎng)絡編程的三大要素:
1.IP:設備在網(wǎng)絡中的唯一標識
2.端口:程序在設備上的唯一標識
3.協(xié)議:設備之間的通信規(guī)則

        UDP:    //群發(fā)消息.
            1. 面向無連接.
            2. 采用數(shù)據(jù)報包(DatagramPacket)發(fā)送數(shù)據(jù), 每個包的大小不能超過: 64KB.
            3. 不安全(不可靠)協(xié)議.
            4. 效率相對較高.
            5. 不區(qū)分客戶端和服務器端, 叫發(fā)送端和接收端.
        
        TCP:    //單聊
            1. 面向有連接(三次握手).
            2. 采用IO流發(fā)送數(shù)據(jù), 理論上來講,無數(shù)據(jù)大小限制.
            3. 安全(可靠)協(xié)議.
            4. 效率相對較低.
            5. 區(qū)分客戶端和服務器端.

網(wǎng)絡通信的原理:
網(wǎng)絡通信也叫Socket通信, 通信兩端都獨有自己的Socket對象, 數(shù)據(jù)在兩個Socket之間進行交互.
//例如: 你給你的朋友打電話, 看起來好像是你和你朋友在聊天, 其實是兩個手機在輸出數(shù)據(jù).



面試題:

1. 多線程并行和多線程并發(fā)的區(qū)別? 

2. Java程序是多線程的嗎?
    是, 至少開啟了 main線程(主線程), GC(垃圾回收線程).


3. 線程的默認命名規(guī)則是什么?
    Thread-編號, 編號從0開始.

4. 多線程執(zhí)行的特點是什么?
    隨機性, 延遲性. 原因是因為CPU在做著高效的切換.

5. 多線程的兩種實現(xiàn)方式的區(qū)別是什么?
    繼承Thread類:
        好處: 代碼相對比較簡單.   //因為是繼承Thread類, 所以可以直接使用Thread類中的方法.
        弊端: 擴展性相對較差.        //因為已經(jīng)繼承Thread類了, 就不能繼承別的類.
        
    實現(xiàn)Runnable接口:
        好處: 擴展性相對較強.
        弊端: 代碼相對比較繁瑣.
            //繁瑣, 冗余, 復雜, 困難.
            
6. 多線程的生命周期是什么?
    官方解釋:
        新建, 就緒, 運行(可能會發(fā)生阻塞), 死亡.
        
    加強版:
        新建, 就緒, 運行(可能會發(fā)生阻塞和等待), 死亡.


7. 網(wǎng)絡編程的三大要素是什么?

8. 端口號的范圍是多少?
    0--65535,其中0~1024之間的端口號已經(jīng)被系統(tǒng)占用了, 或者用作保留端口.

9. UDP協(xié)議和TCP協(xié)議的區(qū)別是什么?
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 彎弓倚玉郎,竹弦笑滿長。 玲瓏走趙府,召喚紅衣裳。 -------靜靜手扎
    靜靜086閱讀 198評論 0 0
  • 回娘家 (天蝎網(wǎng)絡提供) 孫儀 詞 湯尼 曲 朱明瑛 演唱 風吹著楊柳嘛 唰啦啦啦啦啦 小河里水流 得兒 嘩啦啦啦...
    貓戀一夏閱讀 605評論 1 2
  • 今天晚上,餐前水果是橙子,每個孩子三瓣。所有人都吃完了,看到有個小姑娘還沒吃,有點奇怪,問她為什么還不吃,她說要帶...
    我是一朵蘑菇a閱讀 125評論 0 0

友情鏈接更多精彩內(nèi)容