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