一个业务Object
A--->是一个Runnable 设置object可用 
B--->是一个Runnable 设置object不可用
C--->是一个Runnable  使用object也就是当A运行后 要通知C实例都恢复 B运行后 C的实例都挂起。

解决方案 »

  1.   

    可不可以把这个OBJECT搞成Synchronized的 然后有个标志位是可用不可用
    不然就需要有个共享变量Flag来控制了
    A运行的时候改变Flag为可用,如果Flag变了就挂起
    B运行的时候改变Flag为不可用,如果Flag变了就挂起学习中
      

  2.   


    C是一条一直运行中的线程B就是对C进行wait() A对C进行notify()
      

  3.   


    补充一下具体业务吧 其实就这个功能一个ConnectNet.java  GetNetData.java
    其中 ConnectNet.java 中含有连网断网功能
    GetNetData.java 获取数据的Runnable,当断网时 GetNetData挂起
    连网后GetNetData恢复细节功能不用实现 只需要简单打印一下就好 主要是多线程的设计
      

  4.   


    /**
     * 
     */
    package cn.luochengor.csdn;import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;/**
     * 一个业务Object
     * A--->是一个Runnable 设置object可用  
     * B--->是一个Runnable 设置object不可用
     * C--->是一个Runnable 使用object
     * 
     * @Author luochengor
     * @Date Oct 21, 2011
     * @Email [email protected]
     */
    public class ThreadTest { /**
     * @param args
     * @throws InterruptedException 
     */
    public static void main(String[] args) throws InterruptedException {
    BusinessObject bObject = new BusinessObject();
    ExecutorService exec = Executors.newCachedThreadPool();
    exec.execute(new C(bObject));
    exec.execute(new A(bObject));
    exec.execute(new B(bObject));
    TimeUnit.SECONDS.sleep(5);
    exec.shutdownNow();
    }}class BusinessObject {
    private boolean isEnable = false;

    public synchronized void enable() {
    this.isEnable = true;
    notifyAll();
    }

    public synchronized void disable() {
    this.isEnable = false;
    notifyAll();
    }

    public synchronized void waitForEnable() throws InterruptedException {
    while (!isEnable) {
    wait();
    }
    }

    public synchronized void waitForDisable() throws InterruptedException {
    while (isEnable) {
    wait();
    }
    }

    public synchronized void doWork() throws InterruptedException {
    while (!isEnable) {
    System.out.println("class C is suspended.\r");
    wait();
    }
    System.out.println("BesinessObject do something.");
    }

    }class A implements Runnable {
    private BusinessObject bObject;

    public A (BusinessObject bObject) {
    this.bObject = bObject;
    }

    @Override
    public void run() {
    try {
    while (!Thread.interrupted()) {
    TimeUnit.MILLISECONDS.sleep(600);
    bObject.enable();
    System.out.println("class A enable BusinessObject.");
    bObject.waitForDisable();
    }
    } catch (InterruptedException e) {
    System.out.println("InterruptedException class A");
    }
    System.out.println("Ending class A Task");
    }
    }class B implements Runnable {
    private BusinessObject bObject;

    public B (BusinessObject bObject) {
    this.bObject = bObject;
    }

    @Override
    public void run() {
    try {
    while (!Thread.interrupted()) {
    TimeUnit.MILLISECONDS.sleep(600);
    bObject.disable();
    System.out.println("class B disable BusinessObject.");
    bObject.waitForEnable();
    }
    } catch (InterruptedException e) {
    System.out.println("InterruptedException class B");
    }
    System.out.println("Ending class B Task");
    }
    }class C implements Runnable {
    private BusinessObject bObject;

    public C (BusinessObject bObject) {
    this.bObject = bObject;
    }

    @Override
    public void run() {
    try {
    while (!Thread.interrupted()) {
    bObject.doWork();
    TimeUnit.MILLISECONDS.sleep(200);
    }
    } catch (InterruptedException e) {
    System.out.println("InterruptedException class C");
    }
    System.out.println("Ending class C Task");
    }
    }
    运行结果(参考):class C is suspended.BesinessObject do something.
    class B disable BusinessObject.
    class A enable BusinessObject.
    BesinessObject do something.
    BesinessObject do something.
    class B disable BusinessObject.
    class C is suspended.class A enable BusinessObject.
    BesinessObject do something.
    BesinessObject do something.
    BesinessObject do something.
    class B disable BusinessObject.
    class C is suspended.class A enable BusinessObject.
    BesinessObject do something.
    BesinessObject do something.
    BesinessObject do something.
    class B disable BusinessObject.
    class C is suspended.class A enable BusinessObject.
    BesinessObject do something.
    BesinessObject do something.
    BesinessObject do something.
    class B disable BusinessObject.
    class C is suspended.InterruptedException class C
    Ending class C Task
    InterruptedException class B
    InterruptedException class A
    Ending class A Task
    Ending class B Task
      

  5.   

    以上代码仅供参考,如有错误,请指教,邮箱[email protected]
      

  6.   


    太夸张了吧,我刚好前段时间在补习多线程,看了《Java编程思想》,这是按照里面的一个例子改的,你还是看书吧,把里面的例子都敲一遍,理解一遍,应该会有较大帮助的。
      

  7.   


    呵呵 我目前工作上不用java 以前学过java 好久都没弄了 最近自己研究点东西遇到这样个业务 搞不定了。
    线程那一直没弄太明白