实验11——java线程模拟卖票
package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 1.0 * @创建时间:2020年7月31日 下午2:28:24 * @类说明: 綫程的生命周期:從創建到消亡。新建狀態:new * Thread();就緒狀態:start();阻塞狀態:sleep(),wait();運行狀態:run(); * 消亡:執行完run方法的語句就自然消亡了,再次使用須再次創建 * 綫程的優先級:不同優先級:高優先級先執行,低優先級后執行;同一優先級:先到先服務; * 綫程優先級的定義:怎麽規範綫程的優先級:系統默認綫程的優先級。 人爲設置綫程的優先級。 * 綫程的同步:儅多個綫程共同訪問一個共享變量時,可能會導致共享變量的不完整或者説不安全(解決方案:pv操作) * 爲了共享變量的安全性,使用同步機制保證共享變量的安全性 * 當一個綫程改變共享變量時,其他綫程不能使用共享變量,儅綫程計算完成後,其他綫程才可以使用共享變量( * 使用Synchronized關鍵字實現綫程同步;同步塊:Synchronized(鎖對象){操作共享變量的代碼(運算)}) * 在方法Synchronized上用此關鍵字修飾的方法叫做同步方法 */ public class Demo7 { private static int ticket = 10; public static void test1() { Thread r = new Thread() { @Override public void run() { // TODO Auto-generated method stub while (true) { synchronized (Demo7.class) { if (ticket <= 0) { try { throw new Exception("票賣完了"); } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); break; } } else { Demo7.ticket--; System.out.println(Thread.currentThread().getName() + "賣了一張票,還剩" + ticket + "張"); } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }; r.start(); } public static void test2() { Thread t1 = new Thread(() -> { for (int i = 1; i < 11; i++) { System.out.println("t1"); } }); Thread t2 = new Thread(() -> { for (int i = 1; i < 11; i++) { System.out.println("t2"); } }); Thread t3 = new Thread(() -> { for (int i = 1; i < 11; i++) { System.out.println("t3"); } }); t3.setPriority(Thread.MAX_PRIORITY); t1.setPriority(Thread.NORM_PRIORITY); t2.setPriority(Thread.MIN_PRIORITY); t1.start(); t2.start(); t3.start(); } public static void main(String[] args) { // TODO Auto-generated method stub test1(); } }
作者:赵瑞鑫。支持原创,从你我做起。