(二)ConcurrentThreadjava
1.实际中,10个窗口卖票,并发的安全性问题,不能一张票卖给两我的安全
2.电商中,10个手机,一下卖出去了50个,被50我的抢到了并发
3.线程同步(就是锁)ide
火车上厕所,厕所是共享资源,上厕所的人是并发的线程,厕所只能嘘嘘100次this
4.针对线程并发安全性问题,须要使用同步锁,就是共享资源同时只能1个线程去访问spa
5.共享资源同步锁代码块线程
synchronized(锁对象){对象
操做共享资源代码资源
}get
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(); } }