java 多线程中提供了两种实现同步的方法:a.同步代码块,b.同步代码块
a.同步代码块
class MyThread implements Runnable {
private int ticket=5;
public void run(){
for(int i=0;i<100;i++){
synchronized(this){ //针对当前对象进行同步
if (ticket>0)
{ try
{
Thread.sleep(200);
}
catch (InterruptedException e )
{
e.printStackTrace();
}
System.out.println("剩余的票数为:"+ticket--);
}
}
}
}
}
public class ThreadDemo{
public static void main(String[] args){
MyThread mt=new MyThread();//实例化runnable 子类的对象
/*Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();*/
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();//
}
}
b.使用同步方法:
class MyThread implements Runnable {
private int ticket=5;
public synchronized void sale(){
if (ticket>0)
{
try{
Thread.sleep(200);
}catch (InterruptedException e ){
e.printStackTrace();
}
System.out.println("剩余的票数为:"+ticket--);
}
}
public void run(){
for(int i=0;i<100;i++){
this.sale();
}
}
}
public class ThreadDemo{
public static void main(String[] args){
MyThread mt=new MyThread();//实例化runnable 子类的对象
/*Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();*/
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
运行的结果为:
剩余的票数为:5
剩余的票数为:4
剩余的票数为:3
剩余的票数为:2
剩余的票数为:1