synchronized
关键字修饰的代码块或方法在所有的实例化线程中只有一个线程能运行
我们以出售车票为例,在同步化四个窗口之后,在出售车票这个“动作”时,只有一个窗口能执行,这样就不会重复出售同一张车票了。
package cn.itcast.example;
class Test{
public static void main(String []args)
{
new Thread(new TicketsWindow(),"窗口一").start();
new Thread(new TicketsWindow(),"窗口二").start();
new Thread(new TicketsWindow(),"窗口三").start();
new Thread(new TicketsWindow(),"窗口四").start();
}
}
class TicketsWindow implements Runnable{
private static int tickets=100;
Object lock=new Object();
public void run() {
while(true)
{
if(tickets>0) {
synchronized(lock){
System.out.println(Thread.currentThread().getName()+"出售第"+tickets--+"张票");
}
}
else break;
}
}
}