1. 线程同步的条件
1.1 有多个线程要访问资源
1.2 访问的资源是统一份资源
2. 线程同步的方法
2.1 采用同步代码块的方式来实现同步,其中代码的监视器(锁)可以是任何一个对象,但是要注意的是多个线程应该共享的是同一个监视器,否则无法实现同步。
class Ticket implements Runnable{
private static int ticket=100;
public synchronized void run(){
while(true){
synchronized(Ticket.class)
{
if(ticket>0)
{
sale();
}
}
}
}
}
2.2 采用同步方法的方式来实现同步,其中要注意的是,在非静态的方法中,其默认使用的锁为调用该方法的对象,即this,在静态的方法中使用的是该方法所在类的class
对象。
class Ticket implements Runnable{
private static int ticket=100;
public void run(){
while(true){
sale();
}
}
public synchronized void sale(){
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"....."+ticket--);
}
}
}