有这样一个工厂,工厂中有5个工作站,A,B,C,D,E. 
关系如图:
每个工作站上都要处理三个产品P1,P2,P3。
现有三个员工W1,W2,W3。W1和W2负责处理产品P1,P2,W3负责处理P3
W1在A上处理P1,然后随机选择了去C上继续处理P1,
此时W3想在A上处理P3,但是工作站还没有处理过P2,所以W3只能在A处等待直至A中的P2被处理了才可以处理P3
W2想在A处理P1,发现此处的P1已经被处理了,所以他去B中处理P1(工作站B与C之间不相关,所以可以同时处理P1),然后去下一工作站D处理P1
W1从C处处理完了之后来到了B,发现B处理完了P1,继而来到D,D正在工作,所以他等D执行完。
W2在D处执行完来到了C处,发现P1已经被处理过了,进而来到了E。
W1被唤醒之后发现D,E中的P1都已经处理完了。
而此时W2毫无阻碍的在ABCDE上处理完了P2,
W3被唤醒开始在ABCDE上处理P3
W1发现P2都被处理完了,结束工作。各位大神 这个过程怎么使用多线程实现??

解决方案 »

  1.   

    个人负责个人的,别混着用。不如根据工作量
    A,B负责P1
    C,D负责p2
    E 负责P3
      

  2.   

    这个题很奇怪啊,既然是多线程,就不能保证他们的动作都一定按照题目的顺序来。我只能告诉你等待用wait(),唤醒用notifyall()。
      

  3.   

    synchronized class StationA {
        private boolean p1, p2, p3;
        private boolean working;    public StationA() {
            p1 = p2 = p3 = working = false;
        }    public void workOnP1() {
            if(p1)
                return;
            if(working) {
                try {
                    wait();
                } catch (InterrupedException e) {
                }
            }
                working = true;
                p1 = true;
                working = false;
        }
        ……………………
    }类似这样了。你可以看看,我也是刚刚开始学习java。
      

  4.   

    哦,上面workOnP1()的末尾要加一个notifyAll(),我掉了。
      

  5.   

    嗯………………我觉得还要在working判断了之后再进行一次p1的判断才比较保险。总体的策略就是每个员工遍历一遍工作站,然后在每个工作站上都执行所有工作,假如有人正在工作就等待,假如有人已经做了就直接下一个工作或者下一个工作站。我给你的代码虽然不全面,但是稍加修改应该就能够适用了。
      

  6.   

    我对楼主题目的理解 大致是这样。 楼主说的流程并不是固定的流程 只是一种可能的流程是吧? 
    题目就是要求3个不同的进程 W1 2 3 处理事务 但是事务是按照一定的顺序走的 每个点都必须完成, 然后按照P123 顺序, 然后按箭头 每个前面的PN 完成才能完成后个的PN, 题目是这个意思么。。