Java--线程安全问题

Java–线程安全问题

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

说明

多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的

模拟线程安全的问题

模拟票

package www;

public class Ticket implements Runnable {
    private int ticket = 100;
    
    //创建锁对象
    Object obj = new Object();

    @Override
    public void run() {
        while (true){
            if (ticket>0){
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"正在买第"+ticket+"张票");
                ticket--;
            }
        }
    }
}


测试类

package www;

public class TicketTest {
    public static void main(String[] args) {
        Ticket run = new Ticket();
        Thread a = new Thread(run);
        Thread b = new Thread(run);
        Thread c = new Thread(run);
        a.start();
        b.start();
        c.start();
    }
}

结果

在这里插入图片描述

产生了重复的票,这就是线程安全的问题

总结

线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写

操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,

否则的话就可能影响线程安全。

感谢

黑马程序员

百度百科

以及勤劳的自己

发布了249 篇原创文章 · 获赞 624 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_45163122/article/details/105409772