【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