• 请不要在回答技术问题时复制粘贴 AI 生成的内容
asanelder
V2EX  ›  程序员

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

  •  
  •   asanelder · Jan 14, 2021 · 2938 views
    This topic created in 2122 days ago, the information mentioned may be changed or developed.
    在 Java 中, 有对象, 和线程这两个概念, 对象虽然有数据和形为, 但对象本身不能执行, 要使用线程来执行.

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

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

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

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

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

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

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

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

    执行对象的线程,本身就是对象,它们只是分工不同的对象,并不是割裂的两种东西。Java 里面线程就是用对象抽象的,我不知道楼主是怎么得出第一段那个对线程的看法的。
    no1xsyzy
    no1xsyzy
    Jan 15, 2021
    17
    说到 Actor model
    Pony 是面向对象的 actor model 异步
    对象里可以定义 method 和 behavior
    behavior 一旦调用就会建立新的…… “线程” —— 如果你高兴这么叫的话
    acmore
    acmore
    Jan 15, 2021
    18
    即使是 Actor 或者是 CSP 模型也一样,你写的代码只是被运行的规范,背后还是会有一堆执行者(操作系统线程)来运行这些规范。
    misaka19000
    misaka19000
    Jan 15, 2021
    19
    瞎类比
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2160 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 03:09 · PVG 11:09 · LAX 19:09 · JFK 22:09
    ♥ Do have faith in what you're doing.