今天去面试,先被问到了进程和线程的区别,我解释说,进程里的变量属于这个进程,不能和别的进程共享。 之后面试官就问我,那两个进程之间怎么交互? 两个进程操作同一个资源,那么怎么提供同步和互斥?我知道同一个进程里的变量可以被这个进程里的线程共享,那可以提供一个公共变量,一个线程在操作完资源之后修改这个变量的值,另一个线程不断的读取这个公共变量,如果发现这个变量被修改,那么就可以去操作资源,所以我想,是不是线程也是这样的,所以我就这样回答他,结果他问我,既然进程中的变量不能共享,那这个公共变量申明在什么地方?怎么同步呢? 我当时一头雾水,请高人指教!

解决方案 »

  1.   

    不记得JAVA里哪本书说了,我不提供两个进程交互的方便给你,如果你要同时做两个事情而这两个事情又有关联,请你用线程而不要用进程
    JAVA的进程线程机制跟C++不一样的,而且C++那种还是跟平台相关所以,对于这样的问题,你不要害怕他,你问他,
    你两个进程为啥要交互?
    如果要同步又互斥的访问一个资源,为什么要设计成两个进程,而且还规定不能用两个线程?如果有充分的理由,那我告诉你
    java没有原生的方法,只能寻找变通的方法
    内存映射,相互发socket包等等我的理解就是,java中
    1,每个进程有自己独立的地址空间,不同进程的地址空间不能相互访问,(这个是java安全性决定的)
    2,同一个进程中的线程公用一个地址空间,在允许的情况下(生命周期,可见度),不同线程间的地址可以相互访问;另外,面试官有时候就是装傻,问些奇怪的问题,看你到底对这个东西了解多少。所以,你只要肯定的,你就说,别让他给你带到沟里去