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();
    }
}

 

 
 
 
posted @ 2022-04-07 21:59  phpwyl  阅读(95)  评论(0编辑  收藏  举报