多线程安全问题——访问共享

同步代码块Synchronized(锁对象){可能出现重写爱情问题的代码

}

1.通过代码块中的锁对象,可以使用任意对象

2.但必须保证多个线程使用的锁对象是同一个

3.锁对象作用:

把同步代码块锁住只让一个线程执行

//模拟卖票
//创建三个进程,同时开启,对共享的票进行出售
public class Demo02Ticket {
    public static void main(String[] args) {
        RunnableImpl run=new RunnableImpl();
        Thread t1=new Thread(run);
        Thread t2=new Thread(run);
        Thread t3=new Thread(run);
        t1.start();
        t2.start();
        t3.start();

    }
}

 

锁对象解决安全重写和错误问题:

import java.util.Objects;

public class RunnableImpl implements Runnable {
    private int ticket=100;
    Object obj=new Object();//创建锁对象
    @Override
    public void run() {
        while (true){
            synchronized (obj){
                if (ticket>0){
                    //票存在,卖票ticket
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"-->正在卖"+ticket+"张票");
                    ticket--;
                }
            }

        }

    }
}

 

posted @ 2020-09-26 15:52  159566  阅读(117)  评论(0编辑  收藏  举报