当前位置:编程学习 > JAVA >>

java多线程模拟工厂生产

有这样一个工厂,工厂中有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都被处理完了,结束工作。

各位大神 这个过程怎么使用多线程实现?? --------------------编程问答-------------------- 个人负责个人的,别混着用。

不如根据工作量
A,B负责P1
C,D负责p2
E 负责P3

--------------------编程问答-------------------- 在搞并行计算? --------------------编程问答--------------------
引用 楼主 muggle_ZCH 的回复:
有这样一个工厂,工厂中有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被处理了才可以处……


版主 我在你空间留言了,想让你帮我删除或者修改个之前的帖子,谢谢啦 因为那个帖子有我公司的一些信息,非常感谢 --------------------编程问答--------------------
引用 楼主 muggle_ZCH 的回复:
有这样一个工厂,工厂中有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被处理了才可以处……
题就是这么要求的 不能随便改。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 这个题很奇怪啊,既然是多线程,就不能保证他们的动作都一定按照题目的顺序来。我只能告诉你等待用wait(),唤醒用notifyall()。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 6 楼 salaton 的回复:
这个题很奇怪啊,既然是多线程,就不能保证他们的动作都一定按照题目的顺序来。我只能告诉你等待用wait(),唤醒用notifyall()。
就是为了说明一下运行的条件的~不一定是按照这个顺序执行的 就是个例子而已 --------------------编程问答-------------------- 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。 --------------------编程问答-------------------- 哦,上面workOnP1()的末尾要加一个notifyAll(),我掉了。 --------------------编程问答-------------------- 嗯………………我觉得还要在working判断了之后再进行一次p1的判断才比较保险。

总体的策略就是每个员工遍历一遍工作站,然后在每个工作站上都执行所有工作,假如有人正在工作就等待,假如有人已经做了就直接下一个工作或者下一个工作站。

我给你的代码虽然不全面,但是稍加修改应该就能够适用了。 --------------------编程问答-------------------- --------------------编程问答-------------------- 不懂,围观一下。 --------------------编程问答-------------------- 我对楼主题目的理解 大致是这样。 楼主说的流程并不是固定的流程 只是一种可能的流程是吧? 
题目就是要求3个不同的进程 W1 2 3 处理事务 但是事务是按照一定的顺序走的 每个点都必须完成, 然后按照P123 顺序, 然后按箭头 每个前面的PN 完成才能完成后个的PN, 题目是这个意思么。。 --------------------编程问答--------------------
引用 1 楼 java2000_net 的回复:
个人负责个人的,别混着用。

不如根据工作量
A,B负责P1
C,D负责p2
E 负责P3


+1.
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,