1. 程式人生 > >【解決線程安全問題:同步方法】

【解決線程安全問題:同步方法】

nbsp exceptio ket @override pan 解決 ticket oid tst

同步方法:就是把同步關鍵字加到方法上

同步方法的鎖對象是什麽呢?this(不信可以試試把下面的this換成其它對象)

package com.test;

public class SellTicket implements Runnable {

    /**註意,如果是用繼承的方式,此處必須用靜態修飾*/
    private int tickets = 60;
    private int x = 0;

    @Override
    public void run(){
        while(true){
            if(x%2==0){
                
synchronized(this){ doSell(); } }else{ sellTicket(); } x++; } } private synchronized void sellTicket() { doSell(); } private void doSell() { if(tickets>0){
try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"張票"); tickets--; } } }
package com.test;

public class SellTicketTest {

    
public static void main(String[] args){ SellTicket sellTicket = new SellTicket(); Thread t1 = new Thread(sellTicket,"窗口一"); Thread t2 = new Thread(sellTicket,"窗口二"); Thread t3 = new Thread(sellTicket,"窗口三"); t1.start(); t2.start(); t3.start(); } }

如果是同步靜態方法,那麽鎖對象就不是this了,而是類的class文件。

【解決線程安全問題:同步方法】