java 队列同步_做同步java方法队列调用?

本文探讨了Java中synchronized方法如何为多线程提供锁定,并分析了当多个线程尝试调用同一对象的锁定方法时的行为。在示例中,三个线程几乎同时调用一个类的同步方法。尽管Java内存模型保证了线程的互斥访问,但不保证调用顺序。因此,线程的执行顺序取决于调度器,可能造成调用的不确定性。最佳实践是在处理共享数据时使用适当的同步机制,如锁或并发集合,以确保数据一致性。
摘要由CSDN通过智能技术生成

我已经阅读了有关同步方法的oracle doc以及它们如何为多线程程序引入锁定,但有一件事我不清楚.对已经锁定的方法的后续调用是否排队?

让我们说我们有一个班级:

class Astore {

...

public synchronized void a() {

doSomethingTimeConsuming();

}

...

}

和3个调用astore.a()的线程

final Astore astore = new Astore();

Thread t1 = new Thread(new Runnable() {

public void run() {

astore.a();

doSomethingElse();

astore.a();

}

});

t1.start();

Thread t2 = new Thread(new Runnable() {

public void run() {

astore.a();

}

});

t2.start();

Thread t3 = new Thread(new Runnable() {

public void run() {

astore.a();

}

});

t3.start();

我不确定我是否正确地做了这个例子,但重点是,3个线程几乎同时使用synchronized方法调用同一个对象.

将操作顺序存储在队列中,以便线程调用将是:

> t1(因为它被称为第一个)

> t2(在T1之后调用)

> t3

再次> t1(当其他线程请求方法时,它正忙着用A做某事)

我可以安全地假设这将是行为,或者不能保证这将是顺序(或者更糟糕的是,t2和t3可能以随机顺序被调用)

当多个线程可能需要共享数据时的最佳实践是什么(例如,每个活动连接有一个线程的套接字服务器 – 我不希望6个客户端在等待第一个完成大量上传到共享数据结构)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值