多线程synchronized
好处:
更加的安全,此处代码不加synchronized就会导致(因为有sleep)出现0或者负票,有堵塞,假如线程一开始最后一张1号票,但是堵塞了,线程二执行发现tickets大于零两个都执行最后就导致有零或者负票
坏处:
程序变慢了,再synchronized代码块相当于是单线程,因为要排队,外面是多线程
package homework;
class SellTickets implements Runnable{
private int tickets=100;
Object o=new Object();
@Override
public void run(){
while(true){//synchronized
synchronized(o) {/*锁,必须共用一个锁,锁的对象可以任意,此处是Object类,也可其他类,但是唯一的要求就是必须是共用同一个锁,但是不能把Object的定义放入while里面,这样就不是同一个锁*/
if (tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "购票成功:" + tickets--);
} else
break;
}
}
}
}
public class test4 {
public static void main(String[] args) {
SellTickets s=new SellTickets();
Thread w1=new Thread(s);
Thread w2=new Thread(s);
Thread w3=new Thread(s);
w1.setName("窗口一:");
w2.setName("窗口二:");
w3.setName("窗口三:");
w1.start();
w2.start();
w3.start();
}
}
`````