V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
esolve
V2EX  ›  问与答

在一个线程 A 内新开线程 B,线程 A 如何给线程 B 传参?

  •  
  •   esolve · Oct 11, 2017 · 2008 views
    This topic created in 3121 days ago, the information mentioned may be changed or developed.

    譬如下面的 i, s 好像是能被新线程复制过去 这些变量有何注意事项吗,貌似强制需要时 final 的 如果不是 final 的呢?

     public static void main(String[] args) {
        int i = 0;
        Set<String> s =new HashSet<>();
        s.add("one");
        new Thread(new Runnable() {
            @Override
            public void run() {
                func(i, s)
            }
        }).start();
    }
    
    Supplement 1  ·  Oct 11, 2017
    是 java
    10 replies    2017-10-12 23:31:27 +08:00
    ysc3839
        1
    ysc3839  
       Oct 11, 2017 via Android
    请说明编程语言。
    WinterWu
        2
    WinterWu  
       Oct 11, 2017
    1. 看起来是 Java 语言
    2. 任何语言,线程间都在同一个进程内-同一个内存空间,所以变量当然也是共享,除了线程变量-这个需要特别指定。
    esolve
        3
    esolve  
    OP
       Oct 11, 2017
    @WinterWu 变量不是线程栈内变量么。。。怎么可能共享?
    georgetso
        4
    georgetso  
       Oct 11, 2017
    @esolve primitive types are value-passed while object types are reference-passed.
    esolve
        5
    esolve  
    OP
       Oct 11, 2017
    @georgetso 这个和我说的问题的关系是?
    SoloCompany
        6
    SoloCompany  
       Oct 12, 2017
    你搞混了线程和闭包( lamdba ),你以为自己在问一个线程的问题,其实并不是,java 不支持可写的闭包变量而已,万能的解决办法就是 wrapper
    esolve
        7
    esolve  
    OP
       Oct 12, 2017
    @SoloCompany 啊?没看懂你说什么。。。。
    esolve
        8
    esolve  
    OP
       Oct 12, 2017
    @SoloCompany

    我看了这篇文章
    http://www.cnblogs.com/ssp2110/p/3797666.html

    这里闭包涉及到的变量是类变量啊,不是线程栈内变量
    而且是可以改变的变量,不是 final 的
    esolve
        9
    esolve  
    OP
       Oct 12, 2017
    @SoloCompany 喔,懂了,线程栈内变量必须 final
    但是很奇怪为何要这样规定?反正用的是副本
    变了有何关系?
    SoloCompany
        10
    SoloCompany  
       Oct 12, 2017   ❤️ 1
    @esolve 根本没有线程内变量这个概念,你还是不要跑偏了,Java 里面和线程变量有关的只有 ThreadLocal
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1187 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 23:23 · PVG 07:23 · LAX 16:23 · JFK 19:23
    ♥ Do have faith in what you're doing.