多线程题目 2019.06.02 晚
生活随笔
收集整理的這篇文章主要介紹了
多线程题目 2019.06.02 晚
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Thread類創建兩個模擬貓和狗的線程,貓和狗共享房屋中的一桶水,即房屋是線程的目標對象,房屋中的一桶水被貓和狗共享。貓和狗輪流喝水(狗喝的多,貓喝的少),當水被喝盡時,貓和狗進入死亡狀態。貓或狗在輪流喝水的過程中,主動休息片刻(讓Thread類調用sleep(int n)進入中斷狀態),而不是等到被強制中斷喝水.
代碼實現:(測試類有點看不懂)
?
多線程例題一
House類:
public class House implements Runnable {int waterAmount; //用int變量模擬水量public void setWater(int w) {waterAmount = w;}public void run() { while(true) {String name=Thread.currentThread().getName();if(name.equals("狗")) { System.out.println(name+"喝水") ; waterAmount=waterAmount-2; //狗喝的多 }else if(name.equals("貓")){System.out.println(name+"喝水") ; waterAmount=waterAmount-1; //貓喝的少 }System.out.println(" 剩 "+waterAmount);try{ Thread.sleep(2000); //間隔時間 }catch(InterruptedException e){} if(waterAmount<=0) {return; } }} }Test類:
public class Test{public static void main(String args[ ]) {House house = new House();house.setWater(10);Thread dog,cat;dog=new Thread(house); cat=new Thread(house); //cat和dog的目標對象相同 dog.setName("狗");cat.setName("貓"); dog.start();cat.start();} }?
多線程例題二
?
一個線程每隔1秒鐘在命令行窗口輸出本地機器的時間,在3秒鐘后,該線程又被分配了實體,新實體又開始運行。因為垃圾實體仍然在工作,因此,在命令行每秒鐘能看見兩行同樣的本地機器時間.
代碼實現:
?
Clock類:
import java.util.Date; import java.text.SimpleDateFormat; public class Clock implements Runnable{int time=0;SimpleDateFormat m=new SimpleDateFormat("hh:mm:ss");Date date;public void run() {while(true) {date=new Date();System.out.println(m.format(date));time++;try {Thread.sleep(2000);}catch(InterruptedException e) {}if(time==3) {Thread thread=Thread.currentThread();thread=new Thread(this);thread.start();}}}}Test類:
public class Test{public static void main(String[] args) {Clock clock=new Clock();Thread homeTime=new Thread(clock);homeTime.start();} }?
多線程例題三
?
有兩個線程:student和teacher,其中student準備睡一小時后再開始上課,teacher在輸出3句“上課”后,吵醒休眠的線程student。
運行效果如圖:
代碼實現:
ClassRoom類:
public class ClassRoom implements Runnable{Thread student,teacher;ClassRoom(){student=new Thread(this);teacher=new Thread(this);teacher.setName("王教授");student.setName("小張");}public void run() {if(Thread.currentThread()==student) {try {System.out.println(student.getName()+"正在睡覺");Thread.sleep(1000*60*60);}catch(InterruptedException e) {System.out.println(student.getName()+"被老師吵醒了");}System.out.println(student.getName()+"開始聽課");}else if(Thread.currentThread()==teacher) {for(int i=0;i<3;i++) {System.out.println("上課!");try {Thread.sleep(500);}catch(InterruptedException e) {}}student.interrupt(); //吵醒學生 }}}?
Test類:
public class Test{public static void main(String[] args) {ClassRoom s=new ClassRoom();s.student.start();s.teacher.start();} }轉載于:https://www.cnblogs.com/jianqiao123/p/10965039.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的多线程题目 2019.06.02 晚的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习记录-11
- 下一篇: 华为与各国政府签订无间谍无后门协议