JAVA中多线程的数据安全问题
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(); } }