浅谈线程安全和线程不安全

关于线程安全和线程不安全我打算以举例子的方式去说,这样说的比较容易理解

问题:比如说全班去买票,那么整个班上的人不可以同时买到同一张票吧,应该是一个人对应一张票,即时你们是同一个地方的人,也不能买到一张票,所以在买票的高峰期就更不能出现这种情况了,

线程安全:

比如说五个人去上厕所,一次只能上一个人,把厕所门锁住,这样其他人就不能进来了,这就是线程安全,就是说其中一个线程在执行的时候,其他的线程在等待资源释放,不会发生共享一个资源的情况,不会发生两个人同时上厕所的情况,

这里提到了一个知识点:这就是锁

synchornized:用来锁住线程公有的资源,这个方法就是公有的,几个线程都在调用这个方法,
* 加上锁之后第一个线程在调用她的时候不会,其他的线程在等待资源释放,不会出现抢资源的情况,不会同时脉一张票,就是线程安全
* 举个例子:五个人上厕所,第一个人上厕所的时候其他的人不能进来上吧,所以是不是要把厕所给锁住了,synchronized就是锁’
* 其他人不能就来了;
* synchronized就是为了线程安全用的,所得是资源不是资源调用者
* 锁同步代码块或者同步方法;
* 锁块和锁方法的区别:
* 1:都是线程安全锁,可以解决并发问题
* 2:锁的范围不同,锁方法的范围大,锁块的范围小

以买票为例吧

package jucdemo;

import java.util.Random;

/**
 * @author 邓亚非
 */
public class Sell {

    int ticket;

    public Sell() {

    }

    public Sell(int ticket) {
        this.ticket = ticket;
    }

    /**
     * 售卖票的方法
     *
     * @param window synchronized:用来锁住线程公有的资源,这个方法就是公有的,几个线程都在调用这个方法,
     *               加上锁之后第一个线程在调用她的时候不会,其他的线程在等待资源释放,不会出现抢资源的情况,不会同时脉一张票,就是线程安全
     *               举个例子:五个人上厕所,第一个人上厕所的时候其他的人不能进来上吧,所以是不是要把厕所给锁住了,synchronized就是锁'
     *               其他人不能就来了;
     *               synchronized就是为了线程安全用的,所得是资源不是资源调用者
     *               锁同步代码块或者同步方法;
     *               <p>
     *               锁块和锁方法的区别:
     *               1:都是线程安全锁,可以解决并发问题
     *               2:锁的范围不同,锁方法的范围大,锁块的范围小
     *               <p>
     *               同步:当多个线程同时使用一个资源时,会出现资源竞争的情况
     */
    public synchronized void sell(String window) {
        if (ticket > 0) {
            System.out.println(window + "卖出了第" + (ticket--) + "张票");
        }
        try {
            Thread.sleep(new Random().nextInt(500));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

这里我们给方法加上了synchronized锁,就不会出现线程不安全的问题了

线程不安全:

理解了线程安全,就不难理解线程不安全了,是反过来的哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值