亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java 多線程–線程交替

發布時間:2020-06-17 21:58:41 來源:網絡 閱讀:297 作者:nineteens 欄目:編程語言

  要求:

  借助同步機制,sleep()方法,join()方法,實現動畫顯示;

  甲線程:1、3、5、7、9

  乙線程:2、4、6、8、10

  丙線程:a、b、c、d、e

  main()線程輸出:線程開始,線程結束

  輸出結果:線程開始,1-a-2## 3-b-4## 5-c-6## …

  思考:

  使用多個判斷標記,模擬(消費者-生產者)每線程輸出一個后就等待,然后改變自己的標記

  臨界資源–使用多個== putX() == 方法,判斷屬于自己的標記(== isEmptyX ==)然后輸出

  使多個線程有序的交替執行

  代碼:

  class Resource{

  private boolean isEmpty01 = true;

  private boolean isEmpty02 = false;

  private boolean isEmpty03 = false;

  //每個put方法對應一個輸出,每輸出一個就等待,等待其他人的喚醒

  public void put1(){

  while(!isEmpty01){

  try{

  wait();

  }catch(InterruptedException e){

  e.printStackTrace();

  }

  }

  //輸出后

  isEmpty01 = false;

  isEmpty02 = true;

  notifyAll();

  }

  public void put2(){

  while(!isEmpty02){

  try{

  wait();

  }catch(InterruptedException e){

  e.printStackTrace();

  }

  }

  isEmpty02 = false;

  isEmpty03 = true;

  notifyAll();

  }

  public void put3(){

  while(!isEmpty03){

  try{

  wait();

  }catch(InterruptedException e){

  e.printStackTrace();

  }

  }

  isEmpty03 = false;

  isEmpty01 = true;

  notifyAll();

  }

  }

  class Player01 implements Runnable{

  private Resource res;

  private String[] arr;

  Player01(){}

  Player01(String[] arr,Resource res){

  this.arr = arr;

  this.res = res;

  }

  public void run(){

  synchronized(res){

  for(int i=0;i

  //錯誤的點

  //61,62,這兩句不能交換順序

  res.put1();

  System.out.print(arr[i]+"-");

  try{

  Thread.sleep(1000);

  }catch(InterruptedException e){

  e.printStackTrace();

  }

  }

  }

  }

  }

  class Player02 implements Runnable{

  private Resource res;

  private String[] arr;

  Player02(){}

  Player02(String[] arr,Resource res){

  this.arr = arr;

  this.res = res;

  }

  public void run(){

  synchronized(res){

  for(int i=0;i

  res.put2();

  System.out.print(arr[i]+"-");

  try{

  Thread.sleep(1000);

  }catch(InterruptedException e){

  e.printStackTrace();

  }

  }

  }

  }

  }

  class Player03 implements Runnable{

  private Resource res;

  private String[] arr;

  Player03(){}

  Player03(String[] arr,Resource res){

  this.arr = arr;

  this.res = res;

  }無錫知名的婦科醫院 http://www.wxbhnkyy39.com/

  public void run(){

  synchronized(res){

  for(int i=0;i

  res.put3();

  System.out.print(arr[i]+"## ");

  try{

  Thread.sleep(1000);

  }catch(InterruptedException e){

  e.printStackTrace();

  }

  }

  }

  }

  }

  class Test08{

  public static void main(String[] args){

  String[] arr1 = {"1","3","5","7","9"};

  String[] arr2 = {"a","b","c","d","e"};

  String[] arr3 = {"2","4","6","8","0"};

  Resource res = new Resource();

  Player01 p1 = new Player01(arr1,res);

  Player02 p2 = new Player02(arr2,res);

  Player03 p3 = new Player03(arr3,res);

  Thread t1 = new Thread(p1);

  Thread t2 = new Thread(p2);

  Thread t3 = new Thread(p3);

  t1.start();

  t2.start();

  t3.start();

  }

  }

  產生執行結果。

  重要的是:

  這種利用標記可以實現超過2個線程的有序交替執行


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌| 房山区| 霍林郭勒市| 松桃| 河津市| 济源市| 垦利县| 定远县| 明星| 隆德县| 瑞昌市| 基隆市| 萨嘎县| 曲沃县| 衡阳县| 本溪| 临海市| 沐川县| 华坪县| 仁布县| 沽源县| 东丰县| 汾西县| 岢岚县| 集贤县| 新巴尔虎右旗| 庆阳市| 金川县| 体育| 马尔康县| 辰溪县| 株洲县| 秦皇岛市| 德江县| 凤山县| 宁阳县| 石楼县| 深圳市| 佛教| 慈利县| 油尖旺区|