Java 多线程(Java.Thread)----线程同步(并发问题处理)

本文探讨了Java中线程同步的概念,特别是在处理并发问题时的重要性。通过介绍锁机制和synchronized关键字,阐述了如何确保线程安全,同时提到了synchronized的两种使用方式及其可能带来的性能影响和资源浪费问题。
摘要由CSDN通过智能技术生成

线程同步

并发

  • 并发:同一个对象被多个线程同时操作:多人同时抢1张票、多人同时在一个账号里取钱
//并发问题举例1:
//不安全的买票:会出现负数、0、不同的人抢到同一张表
package www.bh.c.threadtest;

public class BuyTickets implements Runnable{
   
    public static void main(String[] args) {
   
        BuyTickets buyTickets = new BuyTickets();
        new Thread(buyTickets,"你").start();
        new Thread(buyTickets,"我").start();
        new Thread(buyTickets,"他").start();

    }

    private int tickets=10;
    boolean flag=true;
    @Override
    public void run() {
   
        while (flag){
   
            try {
   
                buy();
            } catch (Exception e) {
   
                e.printStackTrace();
            }
        }
    }
    public void buy(){
   
        //判断是否有票
        if (tickets<=0){
   
            flag=false;
            return;
        }
        try {
   
            Thread.sleep(1000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+"拿到了第"+tickets--+"张票");
    }
}
//并发问题举例2:
//不安全的取钱:账户余额会出现负数
package www.bh.c.threadtest;

public class GetMoney {
   
    public static void main(String[] args) {
   
        Account account = new Account(100,"学费");
        Drawing you = new Drawing(account, 50, "you");
        Drawing yousister = new Drawing(account, 100, "sister");
        yousister.start();
        you.start();
    }
}
//账户
class 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值