package Multithreading;
/*
出现数据安全的原因
1。是否是多线程环境
2。是否是共享数据
3。是否有多条语句操作共享数据(打破此条件)
同步代码块的好处和弊端
好处:解决了多线程的数据安全问题
弊端:当线程很多时,因为每个线程都会去判断同步上的锁,这里很耗资源的,无形中会降低程序的运行效率
对于非静态的方法我们可以直接用synchronized来修饰 对应的代码块则用this作为锁的类
对于静态方法我们也用synchronized来修饰 对应代码块则用BuyTiket.class 作为锁的类
*/
public class BuyTicket implements Runnable{
int a=100;
private Object obj = new Object(); //这里保证线程用的是同一把锁进行锁定
@Override
public void run() {
while (true){
synchronized (obj) {
if (a > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正再出售第" + a + "张票");
a--;
}
}
}
}
}
package Multithreading;
public class BuyTicketDemo {
public static void main(String[] args) {
BuyTicket b1 = new BuyTicket();
Thread t1 = new Thread(b1,"窗口1");
Thread t2 = new Thread(b1 ,"窗口2");
Thread t3 = new Thread(b1,"窗口3");
t1.start();
t2.start();
t3.start();
}
}