当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?
可以还是不可以?如果不可以,那么一个进程可以同时多个线程并发执行吗?这2个问题我到现在没有怎么搞明白?
新人没有分,请大鸟们帮下小弟!多线程对象并发进程

解决方案 »

  1.   

    程序 = 数据 + 算法当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?--可以,每个线程都有自己的堆栈,按照某个方法的代码,各自运行各自的,
    担心的是变量(数据),如果数据是公共的,那么就有可能存在若干线程同时操作该变量,
    比如A+10; A是公共变量
    线程可以还是不可以?如果不可以,那么一个进程可以同时多个线程并发执行吗?能否与其他线程同时执行,取决cpu的架构《操作系统之哲学原理》 你可以看看
    线程就像虚拟的cpu
    我们在代码申明运行:线程A, 线程B, 线程C .....
    在单核的情况下,他们不是同时运行的,某一时刻,cpu只能运行一个线程

    线程A 使用cpu一小段时间
    线程B 使用cpu一小段时间 
    线程C 使用cpu一小段时间
    ..... .................
    其中的有可能出现线程A运行方法,运到到一半,就轮到线程B使用CPU了,
    这个时候,操作系统会把线程A运行时的堆栈情况保存下来,再次轮到线程A使用cpu的时候,
    在还原堆栈,继续运行~
    在多核的情况下,线程才可是同时运行的。
      

  2.   

    补充:
    比如A+10; A是公用变量(静态变量)线程A将 A赋值为10;这个时候到线程B,由于A是公用变量(static),所以B也可以操作,所以线程B将 A赋值为20这个时候又到线程A,那么就是 20+10=30了,按线程A的目标是10+10=20的
      

  3.   

    楼主让线程异步执行就行了
    主线程 new Thread 开一个支线程在支线程中 用delegate (委托)执行要操作的方法,
    用委托BeginInvoke执行改委托,得到一个IAsyncResult的结果
    并一直判断 IAsyncResult的IsCompleted(表示异步是否执行完成)
    若执行完成,用EndInvoke 得到异步操作的结果,再用主线程上的Invoke 执行显示结果
    (应为主线程,只做了一件事,开了一支线程。异步调用 和等待异步的结束,都是支线程做的,这样主线程不会假死,当主线程要显示结果了,直接操作是有问题的,应为跨了线程!只能用Invoke )
    其实人工方式让他异步!!