線程相關代碼2

倆個人吃蘋果( 加鎖 synchronized 和wait,notify/notifyall一起用 )
public class Text05 {
public static void main(String[] args) {
Runnable3 runnable3 = new Runnable3();
Thread thread = new Thread(runnable3);
thread.start();
Thread thread_b = new Thread(runnable3);
thread_b.start();

}
}
//倆個人吃蘋果 倆秒吃一個 100個
class Runnable3 implements Runnable{
int apple = 100; //共享的變量
@Override//重寫run方法,子線程執行的方法寫在run里面
public void run() {
while (true) {
//鎖里面的代碼只能有一個線程執行
synchronized (this) {
if (apple>0) {
//加鎖
apple--;
System.out.println(Thread.currentThread().getName()+"吃了蘋果,剩下"+apple+"個");
//解鎖
}else {
break;
}
}
}
}
}
運行結果:誰先搶到誰先吃,隨機

方法二的加鎖
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Text06 {
public static void main(String[] args) {
Runnable4 runnable4 = new Runnable4();
Thread thread = new Thread(runnable4);
thread.start();
Thread thread1 = new Thread(runnable4);
thread1.start();
}
}
//倆個人吃一個蘋果 倆秒吃一個 100
class Runnable4 implements Runnable{
int apple =100;
final Lock lock = new ReentrantLock();
@Override
//重寫run方法 子線程執行的方法寫在run里面
//public syncgronized void run(){//鎖住函數 同一時刻 只能由一個線程來調用
public void run() {
while (true) {
lock.lock();//加鎖
if (apple>0) {
apple--;
System.out.println(Thread.currentThread().getName()+"吃了蘋果,剩下"+apple+"個");
lock.unlock();//解鎖
}else{
break;
}
}
}
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文主要講了java中多線程的使用方法、線程同步、線程數據傳遞、線程狀態及相應的一些線程函數用法、概述等。 首先講...
    李欣陽閱讀 2,493評論 1 15
  • Java多線程學習 [-] 一擴展javalangThread類 二實現javalangRunnable接口 三T...
    影馳閱讀 2,987評論 1 18
  • 文章來源:http://www.54tianzhisheng.cn/2017/06/04/Java-Thread/...
    beneke閱讀 1,522評論 0 1
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 5.譽王 譽王,蕭景桓,竊以為,梁帝其實最喜歡這個兒子,因為他的性格和梁帝太相符了,虛偽陰毒多疑,寧可我負天下人,...
    冷水沉香閱讀 1,399評論 0 2