问大佬们一个问题, Java 多线程中的 wait 和 notify 机制,如果部署多个节点怎么来实现类试的机制?好像只接触过分布式锁,有没有什么分布式等待唤醒之类的?或者相关的替代方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lhqing
V2EX    Java

问大佬们一个问题, Java 多线程中的 wait 和 notify 机制,如果部署多个节点怎么来实现类试的机制?好像只接触过分布式锁,有没有什么分布式等待唤醒之类的?或者相关的替代方案?

  •  
  •   lhqing 2020-04-19 17:32:48 +08:00 4134 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问大佬们一个问题,java 多线程中的 wait 和 notify 机制,如果部署多个节点怎么来实现类试的机制?好像只接触过分布式锁,有没有什么分布式等待唤醒之类的?或者相关的替代方案?

    14 条回复    2020-04-20 11:51:15 +08:00
    BBCCBB
        1
    BBCCBB  
       2020-04-19 17:41:16 +08:00   1
    redisson 有实现基于 redis 的 CountDownLatch.
    Jooooooooo
        2
    Jooooooooo  
       2020-04-19 17:42:14 +08:00
    分布式的还是两种, 轮询和通知

    你要描述具体的需求
    BBCCBB
        3
    BBCCBB  
       2020-04-19 17:44:29 +08:00
    也可以用 mq. 完成了发个 mq.
    luckyrayyy
        4
    luckyrayyy  
       2020-04-19 17:56:56 +08:00
    这不是典型的生产消费模型
    lhqing
        5
    lhqing  
    OP
       2020-04-19 18:07:56 +08:00
    @Jooooooooo 没有具体需求哈哈,突然想到的
    sioncheng
        6
    sioncheng  
       2020-04-19 20:55:12 +08:00   1
    比如,zookeeper 的 watch 机制,https://www.cnblogs.com/shamo89/p/9787176.html
    dushixiang
        7
    dushixiang  
      &nbs;2020-04-19 21:49:24 +08:00
    用不到的,所以没有。
    0dJ6Tu8Za734L89T
        8
    0dJ6Tu8Za734L89T  
       2020-04-20 00:44:49 +08:00
    为了不使用 wait notify 等底层 API,所有才有了 java.util.concurrent…………
    CoderGeek
        9
    CoderGeek  
       2020-04-20 02:26:45 +08:00
    没有等待唤醒这个概念 就是一直扫变化 push 或者 pull

    mq 、redis 、zk 临时节点 加锁扫库都可以
    MOETAN0
        10
    MOETAN0  
       2020-04-20 09:30:41 +08:00
    借助外部 zookeeper,节点端使用 apache-curator,参考其 locking 的代码示例。
    Aresxue
        11
    Aresxue  
       2020-04-20 09:35:42 +08:00
    想要仿照 java 原生 api 你就得把对象映射成共享内存,这样就可以进程通信了,但这个仅限于同一台物理机。要想和机器也没关系,那就只能用中间件了,redis 、zk 好做一些,mq 的话在不考虑事务的情况下也可以使用
    leonardyang
        12
    leonardyang  
       2020-04-20 11:31:06 +08:00
    即使部署集群,每个节点上的业务也应该是完整封装起来自己运行自己的,一个节点要控制另一个节点上线程的 wait 和 notify,节点间耦合度这么高不怕出问题吗
    iyangyuan
        13
    iyangyuan  
       2020-04-20 11:41:26 +08:00
    小项目 redis,大项目 mq
    sujin190
        14
    sujin190  
       2020-04-20 11:51:15 +08:00   1
    复杂服务中一般不会这样用,更多会使用消息驱动异步任务执行,也就是数据和状态永远时往前的,和时间一致,反向传播状态和数据和时间逆向,状态管理会变得更加复杂且不稳定,难以提高横向扩展和并发性能,维护也难很多

    简单系统当然无所谓了,简单的可以数据库轮询,zookeeper 的 watch,部分消息队列像 rabbitmq 也带有回执状态的也很容易实现

    https://github.com/snower/slock.git

    之前也用 golang 实现了一个性能不错的原子操作同步服务,可以实现一般系统中常用的 Lock 、Event 、Semaphore 语义,Java 多线程中的 wait 和notify 机制其实就是 Event,而系统中实现的锁其实底层也是原子操作分装而来的,只不过加入了进程调度操作自动进入休眠和唤醒
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     824 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:55 PVG 03:55 LAX 11:55 JFK 14:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86