多線程及網絡編程

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

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

3.2實現Runnable接口

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

模擬買票案例:

public class MyRunnable implements Runnable{

    //定義變量,接收票數
    private static int tickets = 100;
    //重寫run()方法
    @Override
    public void run() {
        while (true){
            synchronized (this){   //加鎖,解決負數票以及重復票,鎖對象必須是同一把鎖,一般是本類的.class
            //本方法使用實現Runnable接口,可以使用this,因為只創建了一個本類對象
            //如果使用繼承Thread類方法實現,不能使用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類中的成員總結

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

網絡編程

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

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

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



面試題:

1. 多線程并行和多線程并發的區別? 

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


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

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

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


7. 網絡編程的三大要素是什么?

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

9. UDP協議和TCP協議的區別是什么?
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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