1.实际中,10个窗口卖票,并发的安全性问题,不能一张票卖给两个人
2.电商中,10个手机,一下卖出去了50个,被50个人抢到了
3.线程同步(就是锁)
火车上厕所,厕所是共享资源,上厕所的人是并发的线程,厕所只能嘘嘘100次
4.针对线程并发安全性问题,需要使用同步锁,就是共享资源同时只能1个线程去访问
5.共享资源同步锁代码块
synchronized(锁对象){
操作共享资源代码
}
6.同步代码加在哪里
(1)代码被多个线程访问
(2)代码中有共享的数据
(3)共享数据被多条语句操作
代码:SaleTicket_synchronized
public class SaleTicket_synchronized extends Thread{
private static int ticket=100;
private String windowname;
// 3.增加同步锁对象资源
private static Object obj=new Object();
// 1.创建一个构造方法,便于给线程设置名字
public SaleTicket_synchronized(String windowname) {
super(windowname);
this.windowname=windowname;
}
// 2.重写run方法
@Override
public void run() {
while(true) {
// 4.使用同步代码块
synchronized (obj) {
if(ticket>0) {
// try {
// Thread.sleep(10);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println(this.getName()+" : 正在卖第 "+ticket+" 张票");
ticket=ticket-1;
}else {
System.out.println(this.getName()+" : 已售罄");
break;
}
}
}
}
}代码:Main_synchronized
public class Main_synchronized {
/**
* 并发
* 4个窗口,卖100张票
* */
public static void main(String[] args) {
// 5.创建SaleTicket对象
SaleTicket_synchronized st1=new SaleTicket_synchronized("窗口1");
st1.start();
SaleTicket_synchronized st2=new SaleTicket_synchronized("窗口2");
st2.start();
SaleTicket_synchronized st3=new SaleTicket_synchronized("窗口3");
st3.start();
SaleTicket_synchronized st4=new SaleTicket_synchronized("窗口4");
st4.start();
}
}原文地址:http://blog.51cto.com/13634837/2091851