java—线程同步处理(synchronized,ReentrantLock处理同步问题)

(一)同步问题

  1. 不同步操作:
    当有多个线程启动时,所有的代码是依次进入到run()方法中的。
    真正进入到方法的对象可能是多个,也可能是一个。进入代码的顺序可能有差异,但是总体的执行是并发执行。线程不安全。
  2. 同步操作
    所有的线程不是一起进入到方法中执行,而是按照顺序一个一个进来。
    线程安全。

(二)synchronized处理同步问题

  1. 同步代码块
    同步代码块在方法里面使用,也就是说依然可能有多个线程对象同时进入方法。
    在同步代码块中会按照线程对象的优先级使用。
  2. 同步方法
    使用synchronized修饰的方法。
  3. 同步虽然可以保证数据的完整性(线程安全操作),但是其执行的速度会很慢。
    同步代码块与同步方法的使用:

同步代码块

class MyThread implements Runnable{
   
    private int ticket = 10;
    @Override
    public void run() {
   
        synchronized (this){
   
            while (ticket > 0) {
   
                try {
   
                    Thread.sleep(200);
                } catch (InterruptedException e) {
   
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "还有" + ticket-- + "张票");
            }
        }
    }
}

同步方法:

class MyThread implements Runnable{
   
    private int ticket = 10;
    @Override
    public void run() {
   <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值