synchronized(object ){
代码块;
}
synchronized的工作原理是:
方式二:
public class SellTickets implements Runnable {
private int tickets = 100;
private String str = new String("Sell Tickets");
//private static String str = new String("Sell Tickets");//加static也没错
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
synchronized(str){
//synchronized(this){//right
if(tickets > 0){
System.out.printf("%s线程在卖第%s张票\n", Thread.currentThread().getName(), tickets);
tickets--;
}else
break;
}
}
}
}
执行代码:
SellTickets demo = new SellTickets();
Thread Thread1 = new Thread(demo);
Thread Thread2 = new Thread(demo);
Thread1.start();
Thread2.start();
方法一:
public class ThreadSellTickets extends Thread {
private static int tickets = 150;//如果票数太少,则可能用不到多个线程; 加static,让他们卖的是同150张票
private static String str = new String("Sell Tickets");//必须加static
//private String str = new String("Sell Tickets");
public void run(){
while(true){
synchronized(str){
//synchronized(this){//error
if(tickets > 0){
System.out.printf("%s线程在卖第%s张票\n", Thread.currentThread().getName(), tickets);
tickets--;
}else
break;
}
}
}
}
执行代码:
ThreadSellTickets demo1 = new ThreadSellTickets();
ThreadSellTickets demo2 = new ThreadSellTickets();
demo1.start();
demo2.start();
容易失误的地方: