V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
asanelder
V2EX  ›  程序员

Java 中对象和执行对象线程的割裂...

  •  
  •   asanelder · 325 天前 · 1610 次点击
    这是一个创建于 325 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 Java 中, 有对象, 和线程这两个概念, 对象虽然有数据和形为, 但对象本身不能执行, 要使用线程来执行.

    俺感受这和现实中的对象不匹配, 现实中有行为的对象一般都是可自运行的(比如说人)

    也就是现实中, 对象和执行对象的线程在绑定在一起的.

    Java 中编程模型和现实的不匹配导致写多线程程序时, 总是感觉不那么直观. 比如总要想这个对象的代码是在哪个线程中执行的.

    有没有那种库或语言可以把执行环境和对象进行绑定的啊...
    19 条回复    2021-01-15 11:04:55 +08:00
    wysnylc
        1
    wysnylc  
       325 天前
    谁说现实里对象和执行对象的线程在绑定在一起,我用泡面碗泡茶不可以吗?
    lewis89
        2
    lewis89  
       325 天前
    面向对象发明跟流行的时候,多核 CPU 还在工程师的美好憧憬中,Python 的 GIL 到现在都没去除呢,想那么多干嘛
    acmore
        3
    acmore  
       325 天前
    "对象本身的执行" 在现实中也不存在,程序应该类比于人的 DNA,现实中 DNA 一样不能自己运行,需要人这个载体来执行,人就是线程。"执行" 这个概念本身就是有执行能力的使动方执行某种可执行的规范,代码是规范,线程是运行起来的规范,这一切都非常自然。

    达到 "把执行环境和对象进行绑定" 这种效果在 Java 中就可以做,把执行逻辑和 Executor 放一起就好了,然后外部调用。计算机中不存在一个对象天然地就能执行,这是操作系统的基础:代码只是块设备中的字节而已,总要有进程和线程来执行它。
    TypeError
        4
    TypeError  
       325 天前 via Android
    golang 啊,一个 go 关键词自动创建 goroutine 调度后台运行,
    不用自己思考太多,除非存在数据同步需要用 channel 或者锁
    Kirsk
        5
    Kirsk  
       325 天前 via Android   ❤️ 1
    假设对象与线程绑定 是不是一线程一对象 楼主说的执行环境更像是上下文 本质不还是对象吗
    sun2920989
        6
    sun2920989  
       325 天前
    我怀疑你在说 erlang.但是我证据不充分.
    secondwtq
        7
    secondwtq  
       325 天前
    你说的不是 Actor Model 么 ...
    kaneg
        8
    kaneg  
       325 天前 via iPhone
    貌似 golang 的 go 关键词是你想要的东西:语法层面提供异步执行的能力。
    asanelder
        9
    asanelder  
    OP
       325 天前
    @wysnylc #1 666
    @lewis89 #2 就是想想而已
    @acmore #3 嗯, 放一个 executor 可以, 俺想看看有没有现成的方案
    @TypeError #4
    @kaneg #8 嗯, 不了解 go, 看来需要学习一下了
    @secondwtq #7 似乎就是这样啊
    cs419
        10
    cs419  
       325 天前
    想这个对象的代码是在哪个线程中执行的 ??
    摸摸脑袋,没看懂

    这里说 Java 中 对象 要由线程来执行
    那么 哪个语言中 对象不是由线程来执行
    xuanbg
        11
    xuanbg  
       325 天前
    面向对象本来很简单,就是逻辑和数据统一嘛,挺好的。结果呢,非要把自己搞成形而上学,导致问题一大堆。
    340244120w
        12
    340244120w  
       325 天前 via iPhone
    脏读 换读 重复读 不就是现实里的问题咩。。
    不过,你也可以程序限制成只有一条线程执行,就完全能和你以为的现实生活对应上了。
    watzds
        13
    watzds  
       325 天前 via Android
    现实中,对象挺难找的
    jorneyr
        14
    jorneyr  
       325 天前
    有没有那种库或语言可以把执行环境和对象进行绑定的啊...

    Qt 就是这么做的,这才真的难受,一不小心就把程序搞崩溃了!
    ychost
        15
    ychost  
       325 天前
    来个 async/await 语法就不会这么想了
    passerbytiny
        16
    passerbytiny  
       325 天前 via Android
    现实中有行为的对象一般都是可自运行的(比如说人) —— 这种人是具有高度自我管理能力的人,把它放到办公桌前(甚至都不用放,给个眼神就行)它就会自启动工作模式。

    你确定存在上面那种“人”?

    执行对象的线程,本身就是对象,它们只是分工不同的对象,并不是割裂的两种东西。Java 里面线程就是用对象抽象的,我不知道楼主是怎么得出第一段那个对线程的看法的。
    no1xsyzy
        17
    no1xsyzy  
       325 天前
    说到 Actor model
    Pony 是面向对象的 actor model 异步
    对象里可以定义 method 和 behavior
    behavior 一旦调用就会建立新的…… “线程” —— 如果你高兴这么叫的话
    acmore
        18
    acmore  
       325 天前
    即使是 Actor 或者是 CSP 模型也一样,你写的代码只是被运行的规范,背后还是会有一堆执行者(操作系统线程)来运行这些规范。
    misaka19000
        19
    misaka19000  
       325 天前
    瞎类比
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4053 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:17 · PVG 11:17 · LAX 19:17 · JFK 22:17
    ♥ Do have faith in what you're doing.