Java 多線程之多個窗口售票問題


/* 
 * 同步 
 * 這里有兩種方式加鎖 
 * 分別是 
 * 1.synchronized 
 * 2.lock()和unlock() 
 */

第一種:

package Runnable接口;  
  
import java.util.concurrent.locks.Lock;  
import java.util.concurrent.locks.ReentrantLock;  
  
/* 
 * 同步 
 * 這里有兩種方式加鎖 
 * 分別是 
 * 1.synchronized 
 * 2.lock()和unlock() 
 */  
public class MyRunnable implements Runnable {  
    private int tickets = 100;  
  
    // 定義鎖  
    private Lock lock = new ReentrantLock();  
  
    public void run() {  
        while (true) {  
            // 加鎖  
            lock.lock();  
            if (tickets > 0) {  
                try {  
                    Thread.sleep(100);  
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
                System.out.println(Thread.currentThread().getName() + "售出了第" + (tickets--) + "張票");  
            }  
            lock.unlock();  
        }  
    }  
}  

第二種:

package Runnable接口;  
  
  
/* 
 * 同步 
 * 這里有兩種方式加鎖 
 * 分別是 
 * 1.synchronized 
 * 2.lock()和unlock() 
 */  
public class MyRunnable implements Runnable {  
    private int tickets = 100;  
  
    public void run() {  
        while (true) {  
            synchronized (this) {  
                if (tickets > 0) {  
                    try {  
                        Thread.sleep(100);  
                    } catch (InterruptedException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    }  
                    System.out.println(Thread.currentThread().getName() + "售出了第" + (tickets--) + "張票");  
                }  
            }  
        }  
    }  
} 
package Runnable接口;  
  
public class RunnableDemo {  
    public static void main(String[] args) {  
        MyRunnable myRunnable = new MyRunnable();  
        Thread t1 = new Thread(myRunnable, "窗口一");  
        Thread t2 = new Thread(myRunnable, "窗口二");  
        Thread t3 = new Thread(myRunnable, "窗口三");  
        t1.start();  
        t2.start();  
        t3.start();  
    }  
}

運行結果:

窗口二售出了第100張票
窗口三售出了第99張票
窗口三售出了第98張票
窗口三售出了第97張票
窗口一售出了第96張票
窗口三售出了第95張票
窗口二售出了第94張票
窗口二售出了第93張票
窗口二售出了第92張票
窗口二售出了第91張票
窗口二售出了第90張票
窗口二售出了第89張票
窗口二售出了第88張票
窗口三售出了第87張票
窗口一售出了第86張票
窗口一售出了第85張票
窗口一售出了第84張票
窗口一售出了第83張票
窗口一售出了第82張票
窗口一售出了第81張票
窗口一售出了第80張票
窗口一售出了第79張票
窗口一售出了第78張票
窗口一售出了第77張票
窗口三售出了第76張票
窗口三售出了第75張票
窗口三售出了第74張票
窗口三售出了第73張票
窗口二售出了第72張票
窗口二售出了第71張票
窗口二售出了第70張票
窗口二售出了第69張票
窗口三售出了第68張票
窗口一售出了第67張票
窗口一售出了第66張票
窗口三售出了第65張票
窗口三售出了第64張票
窗口三售出了第63張票
窗口二售出了第62張票
窗口二售出了第61張票
窗口二售出了第60張票
窗口二售出了第59張票
窗口二售出了第58張票
窗口二售出了第57張票
窗口三售出了第56張票
窗口三售出了第55張票
窗口一售出了第54張票
窗口一售出了第53張票
窗口一售出了第52張票
窗口三售出了第51張票
窗口三售出了第50張票
窗口二售出了第49張票
窗口二售出了第48張票
窗口二售出了第47張票
窗口二售出了第46張票
窗口二售出了第45張票
窗口二售出了第44張票
窗口二售出了第43張票
窗口三售出了第42張票
窗口三售出了第41張票
窗口一售出了第40張票
窗口三售出了第39張票
窗口二售出了第38張票
窗口二售出了第37張票
窗口二售出了第36張票
窗口三售出了第35張票
窗口三售出了第34張票
窗口三售出了第33張票
窗口三售出了第32張票
窗口三售出了第31張票
窗口一售出了第30張票
窗口一售出了第29張票
窗口三售出了第28張票
窗口三售出了第27張票
窗口二售出了第26張票
窗口二售出了第25張票
窗口二售出了第24張票
窗口二售出了第23張票
窗口二售出了第22張票
窗口二售出了第21張票
窗口三售出了第20張票
窗口三售出了第19張票
窗口三售出了第18張票
窗口三售出了第17張票
窗口一售出了第16張票
窗口一售出了第15張票
窗口一售出了第14張票
窗口一售出了第13張票
窗口一售出了第12張票
窗口三售出了第11張票
窗口三售出了第10張票
窗口二售出了第9張票
窗口二售出了第8張票
窗口二售出了第7張票
窗口三售出了第6張票
窗口三售出了第5張票
窗口一售出了第4張票
窗口一售出了第3張票
窗口三售出了第2張票
窗口三售出了第1張票


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM