资讯专栏INFORMATION COLUMN

线程安全问题的代码

Java_oldboy / 2643人阅读

摘要:实现卖票案例定义一个多个线程共享的票源设置线程任务卖票使用死循环让卖票操作重复执行先判断票是否存在提高安全问题出现的概率让程序睡眠票存在卖票正在卖第张票模拟卖票案例创建个线程同时开启对共享的票进行出售创建接口的实现类对象创建类对

package com.itheima.demo06.ThreadSafe;
/*

实现卖票案例

*/
public class RunnableImpl implements Runnable{

//定义一个多个线程共享的票源
private  int ticket = 100;


//设置线程任务:卖票
@Override
public void run() {
    //使用死循环,让卖票操作重复执行
    while(true){
        //先判断票是否存在
        if(ticket>0){
            //提高安全问题出现的概率,让程序睡眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //票存在,卖票 ticket--
            System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票");
            ticket--;
        }
    }
}

}
package com.itheima.demo06.ThreadSafe;
/*

模拟卖票案例
创建3个线程,同时开启,对共享的票进行出售

*/
public class Demo01Ticket {

public static void main(String[] args) {
    //创建Runnable接口的实现类对象
    RunnableImpl run = new RunnableImpl();
    //创建Thread类对象,构造方法中传递Runnable接口的实现类对象
    Thread t0 = new Thread(run);
    Thread t1 = new Thread(run);
    Thread t2 = new Thread(run);
    //调用start方法开启多线程
    t0.start();
    t1.start();
    t2.start();
}

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75608.html

相关文章

  • 线程安全

    摘要:不可变在中,不可变的对象一定是线程安全的。在里标注自己是线程安全的类,大多都不是绝对线程安全,比如某些情况下类在调用端也需要额外的同步措施。无同步方案要保证线程安全,不一定就得需要数据的同步,两者没有因果关系。 在之前学习编程的时候,有一个概念根深蒂固,即程序=算法+数据结构。数据代表问题空间中的客体,代码就用来处理这些数据,这种思维是站在计算机的角度去抽象问题和解决问题,称之为面向过...

    fuyi501 评论0 收藏0
  • 线程安全(上)--彻底搞懂volatile关键字

    摘要:此时,就出现了线程不安全问题了。因为的初始值会是因此,重排序是有可能导致线程安全问题的。真的能完全保证一个变量的线程安全吗我们通过上面的讲解,发现关键字还是挺有用的,不但能够保证变量的可见性,还能保证代码的有序性。 对于volatile这个关键字,相信很多朋友都听说过,甚至使用过,这个关键字虽然字面上理解起来比较简单,但是要用好起来却不是一件容易的事。 这篇文章将从多个方面来讲解vol...

    teren 评论0 收藏0
  • 关于偏向锁,安全点,JIT一些暗坑.

    摘要:前言本文是一篇简短的杂糅本文源自于作者最近的一个疑问为什么在旧版的中偏向锁的移除一定要在全局安全点进行同时在上个星期作者参与的一个项目发生了一件怪事一个服务莫名其妙地不接受任何请求了一切请求都是而查看日志发现出故障的服务本身去请求另一个服务 前言 本文是一篇简短的杂糅. 本文源自于作者最近的一个疑问:为什么在旧版的jdk中偏向锁的移除一定要在全局安全点进行?同时在上个星期,作者参与的一...

    JeOam 评论0 收藏0
  • 如何看待Spring下单例模式与线程安全矛盾

    摘要:线程安全问题都是由全局变量及静态变量引起的。常量始终是线程安全的,因为只存在读操作。局部变量是线程安全的。有状态对象,就是有实例变量的对象,可以保存数据,是非线程安全的。 前言 有多少人在使用Spring框架时,很多时候不知道或者忽视了多线程的问题?   因为写程序时,或做单元测试时,很难有机会碰到多线程的问题,因为没有那么容易模拟多线程测试的环境。那么当多个线程调用同一个bean的时...

    dinfer 评论0 收藏0
  • 如何看待Spring下单例模式与线程安全矛盾

    摘要:线程安全问题都是由全局变量及静态变量引起的。常量始终是线程安全的,因为只存在读操作。局部变量是线程安全的。有状态对象,就是有实例变量的对象,可以保存数据,是非线程安全的。 前言 有多少人在使用Spring框架时,很多时候不知道或者忽视了多线程的问题?   因为写程序时,或做单元测试时,很难有机会碰到多线程的问题,因为没有那么容易模拟多线程测试的环境。那么当多个线程调用同一个bean的时...

    刘永祥 评论0 收藏0
  • 1、多线程安全问题 2、等待唤醒机制

    摘要:线程操作共享数据的安全问题线程操作共享数据的安全问题如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。唤醒全部可以将线程池中的所有线程都唤醒。 01线程操作共享数据的安全问题 *A:线程操作共享数据的安全问题 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。 程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 02...

    罗志环 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<