中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

晋城| 石门县| 孙吴县| 隆林| 泰宁县| 田阳县| 阿图什市| 黄陵县| 九龙城区| 饶平县| 长乐市| 台北县| 南江县| 丹东市| 连平县| 桃园市| 庆云县| 铜川市| 文安县| 汤阴县| 桑植县| 东兰县| 富源县| 宜兰县| 新宾| 日土县| 额济纳旗| 景德镇市| 汝州市| 余干县| 莱西市| 长泰县| 晋城| 柞水县| 莱芜市| 呼伦贝尔市| 阳泉市| 隆德县| 珠海市| 嘉义县| 南康市|