线程安全问题

Posted 想54256

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程安全问题相关的知识,希望对你有一定的参考价值。

/**
 * 出现有些没加入list的原因:线程一拿走了这个list当时里面有10个数据,添加一个变成11个
 * 线程二同时拿走了这个list,当时里面有10个数据,添加一个变成11个(但是正常应该是12个,也就是线程1添加的那个数据没有了)
 */
public class Ticket implements Runnable{
    
    private List<String> list = new ArrayList<>();

    public void run(){
        for(int i=0;i<300;i++){
            try {
                // 调用Thread类的sleep方法,休眠50ms,由于父接口没有throws异常,so我们只能用try...catch
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            list.add("xxx,");
            System.out.println(list.size());
        }
    }

}

结论:多线程操作同一个全局变量,加上线程锁吧

以上是关于线程安全问题的主要内容,如果未能解决你的问题,请参考以下文章

HashMap 和 ConcurrentHashMap 的区别

线程同步-使用ReaderWriterLockSlim类

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

线程安全问题的概述和线程安全的代码实现与问题产生的原理

多线程 Thread 线程同步 synchronized

活动到片段方法调用带有进度条的线程