讀寫鎖是什麼?Python 實現讀寫鎖
阿新 • • 發佈:2020-09-16
多執行緒分為兩種
一,利用繼承來實現多執行緒
package java1; public class java4 { /* * 買票 * 分三個視窗進行買票 * 執行緒安全問題: * 當多個執行緒使用“共享資料”時,就會有執行緒安全問題。 * 當一個執行緒修改了“共享資料”,是會影響其他執行緒。 * * 如何解決執行緒安全? 加鎖 * * * 同步程式碼塊 * * syncronized(鎖物件){ * } * 鎖物件,又稱為監視器物件,同一時刻,莫一段程式碼,只允許一個執行緒執行,其他執行緒進不去。 * 鎖物件的選擇: * 1,可以任意型別的物件。 * 2,必須是這幾天執行緒要使用的同一個鎖物件。 * * 同步方法*/ public static void main(String[] args) { Ticket t1 = new Ticket("視窗1"); Ticket t2 = new Ticket("視窗2"); Ticket t3 = new Ticket("視窗3"); t1.start(); t2.start(); t3.start(); } } class Ticket extends Thread{ private static inttotal = 1000 ; private static Object oj = new Object();//鎖單獨選文一個object,物件需要是一個靜態的static修飾 public Ticket(String name) { super(name); } public void run() { while(true) { synchronized(oj){ if(total > 0) { System.out.println(getName()+ "買了一張票"); total--; try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("剩餘" + total); }else { break; } } } } }
2,利用介面實現多執行緒
package java1; public class Java5 { public static void main(String[] args) { // TODO Auto-generated method stub ticket t = new ticket(); Thread t1 = new Thread(t,"視窗一"); Thread t2 = new Thread(t,"視窗二"); Thread t3 = new Thread(t,"視窗三"); t1.start(); t2.start(); t3.start(); } } class ticket implements Runnable{ private int total = 10000; @Override public void run() { while(true) { synchronized (this) { if(total > 0) { System.out.println(Thread.currentThread().getName() + "買了一張票"); total--; try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("剩餘" + total); }else { break; } } } } }