首頁 > Java > java教程 > 主體

【java基礎】 執行緒實例

黄舟
發布: 2017-02-07 10:58:08
原創
1483 人瀏覽過

今天有小夥伴在後台問java多線程的概念,小編覺得先從掌握基本的線程概念開始,才能更加深刻的認知多線程,通俗的講就是多個並行運行的while循環,可以並發做多個事情,那麼多執行緒在實際使用過程中有可能會操作同一個資料塊,那麼問題多執行緒注意的問題就出現了。先來了解執行緒基本概念以及簡單程式碼實作

Java執行緒學習經典範例-讀寫者示範

Java執行緒學習最經典的例子-讀寫者,主要用到Thread相關知識如下:

-執行緒的start與run

-執行緒的休眠(sleep)

-資料對象加鎖(synchronized)

-資料對象的等待與釋放(wait and notify)

程式實作:

-ObjectDataData關鍵字實作加鎖,在執行緒讀寫者中使用。

-ConsumerThread消費者線程,讀取資料物件中count值之後,通知生產者線程

-ProductThread生產者線程,對資料物件中count值操作,每次加1,然後通知消費者線程

類結構圖如下:

【java基礎】 執行緒實例

程式碼實作

消費者-讀取執行緒

package com.gloomyfish.jse.thirdteen;
 
public class ConsumerThread extends Thread {
    private ObjectData data;
    public ConsumerThread(ObjectData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while(true) {
            try {
                synchronized (data) {
                    data.wait();
                    data.read();
                    data.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}
登入後複製

寫執行緒-生產者執行緒

package com.gloomyfish.jse.thirdteen;
 
public class ProductThread extends Thread {
    private ObjectData data;
 
    public ProductThread(ObjectData data) {
        this.data = data;
    }
 
    @Override
    public void run() {
        while (true) {
            try {
                synchronized (data) {
                    data.write();
                    Thread.sleep(3000);
                    data.notify();
                    data.wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
 
}
登入後複製

資料物件類別

package com.gloomyfish.jse.thirdteen;
 
public class ObjectData {
 
    private int count;
     
    public ObjectData() {
        count = 0;
    }
     
    public void read() {
        System.out.println("read count : " + count);
        System.out.println();
    }
     
    public void write() {
        count++;
        System.out.println("write count : " + count);
    }
}
登入後複製

測試程式碼

public static void main(String[] args) {
        ObjectData data = new ObjectData();
        ConsumerThread ct = new ConsumerThread(data);
        ProductThread pt = new ProductThread(data);
 
        ct.start();
        pt.start();
}
登入後複製

資料物件類別

rrreee了執行緒之間如何透過wait與notify實現資料的讀寫

同步控制。示範了Java的同步關鍵字synchronized的用法與執行緒的用法。

以上就是【java基礎】 執行緒實例的內容,更多相關內容請關注PHP中文網(www.php.cn)!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板