synchronized关键字
意思就是多线程需要同步执行,不能混淆某些代码导致代码运行出错,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。
案例---购买票的时候
比如3个线程同时买票
售票代码
package Thread;
public class buyTicket implements Runnable{
private int ticket=10;
public void run(){
while(ticket>0){
System.out.println("正在出售第"+ticket+"号票");
ticket--;
}
}
}导致结果:
原本一张票卖完了就没有了,但是由于多线程问题的原因,代码判断和递减的时候时间有延迟,导致同一张票被出售几次
现在就要使用synchronized来完成代码块的锁定
synchronized(this) 就是以 ticketTask 为锁对象,this即前面创建的实例 buyTicket task=new buyTicket();
package Thread;
public class buyTicket implements Runnable{
private int ticket=10;
public void run(){
while(ticket>0){
/**
* 使用synchronized关键字解决线程安全问题
*/
synchronized(this){
if(ticket>0){
System.out.println("正在出售第"+ticket+"号票");
ticket--;
}
}
}
}
}使用后的效果
评论已关闭