美文网首页编程语言
线程安全问题引入(2020-03-31)

线程安全问题引入(2020-03-31)

作者: _NewMoon | 来源:发表于2020-03-31 15:24 被阅读0次

售票问题

考虑这样一个问题,现在有一家电影院正在售票,假设票的编号为1~100(每种编号的电影票只有一张):

  • 如果这家电影院只有一个售票窗口,那么在售票时不会出现问题;
  • 如果这家电影院有三个售票窗口,但是每个窗口的票都不一样(1号窗口售133号,2号窗口售3466号...),这样售票也不会出现问题;
  • 如果这家电影院有三个售票窗口,但是每个窗口卖的票都一样,那就会出现问题: 1.可能售出相同的票; 2.可能售出不存在的票;

我们用代码来演示一下这种情况:
构造一个Ticket类,实现了Runnable接口,用来表示电影票,构建了三个线程,代表三个售票窗口:

Ticket.java

package Thread.Problem;


public class Ticket implements Runnable
{
    //总票数
    private int tik = 100;
    @Override
    public void run() {
        while(true) {
            if(tik>0){
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"is sailing No." + tik);
                tik--;
            }
        }
    }
}

Mythread.java

package Thread.Problem;

public class Mythread {
    public static void main(String[] args) {
        Ticket t = new Ticket();

        //开启三个卖票窗口
        Thread t0 = new Thread(t);
        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);

        //开始售票
        t0.start();
        t1.start();
        t2.start();
    }
}

程序运行结果

Output

通过观察输出,我们发现了情况3中提到的两种问题,出现这种情况的原因就是,三个线程共享了Ticket中的tik数据,所以三个线程争夺CPU的执行权导致了多种情况的发生,如何解决这个问题,记录在下一篇中。

相关文章

  • 线程安全问题引入(2020-03-31)

    售票问题 考虑这样一个问题,现在有一家电影院正在售票,假设票的编号为1~100(每种编号的电影票只有一张): 如果...

  • 从零单排List(三)---CopyAndWriteArrayL

    上回说的arrayList的线程安全问题,juc包中引入了CopyOnWriteArrayList来解决这个问题。...

  • 网络之美

    线程安全问题----互斥锁和递归锁 互斥锁线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制就是引入互斥锁...

  • Java线程安全

    线程安全问题的概述 线程安全问题的代码实现 线程安全问题产生的原理 解决线程安全问题_同步代码块 同步代码块:sy...

  • 1-引入synchronized锁

    引入 线程安全问题 在java的多线程的编程中,经常出现线程安全的问题,主要就在于正确性:即多线程对临界资源进行访...

  • 7.2 Handler消息传递机制

    简介:handler消息处理者,用来发生和处理消息,用于解决线程安全问题; 线程安全问题:多线程导致线程安全问题,...

  • 线程的基本语法

    线程同步[解决线程安全问题] 解决线程安全问题 线程同步方式一:同步代码 语法基本 synchronized (同...

  • 五 异常与多线程——第三节 线程同步机制

    1、线程安全问题的概述 多线程访问了共享的数据,就会产生线程安全问题 2、线程安全问题的代码实现 输出:会出现重复...

  • 线程安全问题

    线程安全问题 本篇主要讲解 线程安全问题,演示什么情况下会出现线程安全问题,以及介绍了 Java内存模型 、vol...

  • 线程安全问题的几种解决办法

    title: 线程安全问题date: 2019/04/01 17:13 线程安全问题是由于多个线程同时操作同一全局...

网友评论

    本文标题:线程安全问题引入(2020-03-31)

    本文链接:https://www.haomeiwen.com/subject/stiwuhtx.html