多线程系列三:初遇并发问题:从一个小故事开始,从一行行代码开始

在学习Java的道路上,是否路过多线程时总让你很迷惘;很不巧,我也是,而使我们感到很迷惘主要原因都源于没有对概念的深深的理解和实践。所以我决定漫步Java多线程,同你一起会会多线程。

多线程系列

多线程系列一:理解多线程在于深深地理解了多任务、进程、多线程、线程
多线程系列二:手撕多线程,从会三种创建多线程方式开始:除了常见的两种,你是否了解Callable接口方式?
多线程系列三:初遇并发问题:从一个小故事开始,从一行行代码开始**
多线程系列四:停止多线程,你不会还以为是用stop和destroy吧?
多线程系列五:多线程为何要使用休眠?
多线程系列六:线程礼让与强制执行
多线程系列七:纯手绘图解多线程状态+代码示例,就问你怕了吗?

从多任务、进程、多线程、线程概念的理解,到开始实践创建多线程,这是一种循环渐进的方式;但是多线程遇到最核心的问题是并发的问题。

所以我们从一个小故事开始,从一行行代码开始…

初遇并发,从那一天说起,一颗剽悍的种子哥的偶像来到了他的城市里开演唱会,他满怀兴奋的跑去买票;可是偶像的影响力实在是太大,一下子只剩两张票,却有小白、小蓝、一颗剽悍的种子三个靓仔同时抢。

在一度混乱的争夺中,让一颗剽悍的种子一度暴躁…

从一行行代码开始…

public class ThreadDemo implements Runnable{

    private Integer ticket = 2;

    @Override
    public void run() {
        while (true){
            if(ticket<=0){break;}
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"抢到了第"+ticket--+"张票");
        }
    }
    public static void main(String[] args) {
        ThreadDemo thread = new ThreadDemo();
        new Thread(thread,"小白").start();
        new Thread(thread,"小蓝").start();
        new Thread(thread,"一颗剽悍的种子").start();
    }
}

我抢——好像结果有点不对劲,再来!
多线程系列三:初遇并发问题:从一个小故事开始,从一行行代码开始_第1张图片
我去,终于抢到了第二张票很香,但是怎么小白和小蓝也抢到了第二张???

很明显有卖假票的???
多线程系列三:初遇并发问题:从一个小故事开始,从一行行代码开始_第2张图片

从上面多个用户抢票的情况下(多个线程情况下)可以发现一个问题:

有卖假票的

多线程下的情况,操作同一个资源,线程并不安全,票数出现负数,重复抢到同一张票,数据出现了混乱。

看到这完了吗?这一章是讲完了,但是多线程的系列仍在继续,后面会谈如何解决这种情况。

只所以不讲how,是因为你得先思考why?

遇到问题,请你经过思考,请你经过沉淀,才去试着去解决,因为这才属于你

在多线程里遇见并发,在并发中理解多线程,才是我们学习多线程,学习如何更好处理并发的方式。

漫步Java多线程,同你一起循环渐进的学习多线程,学习更好与并发打交道。

最后:

为了更好的阅读体验,我把想说的话都放在了下面,嘿嘿。

我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条。
如果你能看到这篇博文,说明咱们还是很有缘的;希望能带给你一些许帮助,创作的不易,
把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。

你可能感兴趣的:(多线程&并发,多线程,并发编程)