1. 程式人生 > 其它 >【java基礎】 執行緒例項

【java基礎】 執行緒例項

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

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

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

-執行緒的start與run

-執行緒的休眠(sleep)

-資料物件加鎖(synchronized)

-資料物件的等待與釋放(wait and notify)

程式實現:

-ObjectData資料類物件,通過synchronized關鍵字實現加鎖,線上程讀寫者中使用。

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

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

類結構圖如下:

程式碼實現

消費者-讀執行緒

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();

}

總結:

示例程式程式碼完成了執行緒之間如何通過wait與notify實現資料的讀寫

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

轉載自:http://www.2cto.com/kf/201602/489296.html