多執行緒練習
阿新 • • 發佈:2019-01-04
package practice; /*請按要求編寫多執行緒應用程式,模擬多個人通過一個山洞: 1.這個山洞每次只能通過一個人,每個人通過山洞的時間為5秒; 2.隨機生成10個人,同時準備過此山洞,並且定義一個變數用於記錄通過隧道的人數。顯示每次通過山洞人的姓名,和通過順序;*/ //定義實現類 import java.util.Random; public class Runnable01 implements Runnable { int num = 0; //Object obj = new Object(); @Override public void run() { synchronized ( this/*obj*/) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } num++; System.out.println(Thread.currentThread().getName()+"順序為:"+num); } } } //定義測試類 package practice; public class Runnable01Test { public static void main(String[] args) { Runnable01 run = new Runnable01(); new Thread(run,"張三1").start(); new Thread(run,"張三2").start(); new Thread(run,"張三3").start(); new Thread(run,"張三4").start(); new Thread(run,"張三5").start(); new Thread(run,"張三6").start(); new Thread(run,"張三7").start(); new Thread(run,"張三8").start(); new Thread(run,"張三9").start(); new Thread(run,"張三10").start(); } } 結果為: 張三1順序為:1 張三10順序為:2 張三9順序為:3 張三8順序為:4 張三7順序為:5 張三6順序為:6 張三5順序為:7 張三4順序為:8 張三3順序為:9 張三2順序為:10
package homework; /*有一個包包的數量為100個。分別從實體店和官網進行售賣! 要求使用多執行緒的方式,分別列印實體店和官網賣出包包的資訊! 分別統計官網和實體店各賣出了多少個包包,例如: 官網共賣出了45個 實體店共賣出了55個*/ public class RunnableImpl02 implements Runnable { private int bags = 100; int num1 = 0; int num2 = 0; @Override public void run() { while (true) { payTicket(); } } public synchronized void payTicket() { //synchronized (obj){ if (bags > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } if (Thread.currentThread().getName().equals("官網")) { num1++; } else { num2++; } System.out.println(Thread.currentThread().getName() + "正在賣第" + bags + "個包"); bags--; if (bags == 0) { System.out.println("官網:" + num1); System.out.println("實體店:" + num2); } } } } //定義測試類 package homework; public class RunnableImpl02Test { public static void main(String[] args) { RunnableImpl02 run = new RunnableImpl02(); Thread t1 = new Thread(run); Thread t2 = new Thread(run); t1.setName("官網") ; t2.setName("實體店") ; t1.start(); t2.start(); } }