1. 程式人生 > 實用技巧 >讀寫鎖是什麼?Python 實現讀寫鎖

讀寫鎖是什麼?Python 實現讀寫鎖

多執行緒分為兩種

一,利用繼承來實現多執行緒

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 int
total = 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;
                }
            }
        
        }
    }
    
}