有两个类
一个类是activity,另一个类是Handler。现在Handler里有个变量在实时变化,1和0的变化,我想要实现在activity类里检测Handler中变量的变化的变化。如果检测变量变为一,那么播放一个视频,否则不做任何反应。我查了网上说用观察者模式或者线程监控一直没有实现请各位大牛贴个代码模板呗,谢谢。*********************************************************************
另外,能不能直接在Handler类里直接调用视频呢?如果可以,请教详细步骤,谢谢

解决方案 »

  1.   

    可以这样
    public class Activity implements Runnable{
        
        private Condition playCondition;
        private Lock lock;
        
        public Activity(Lock lock, Condition playCondition){
            this.playCondition = playCondition;
            this.lock = lock;
        }    @Override
        public void run() {
            while (true){
                lock.lock();
                try {
                    this.playCondition.await();
                    play();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } finally {
                    lock.unlock();
                }
            }
            
        }
        
        private void play(){
            System.out.println("play");
        }
        
    }
    public class Handler implements Runnable{
        
        private Condition playCondition;
        private Lock lock;
        private boolean var = true;
        public Handler(Lock lock, Condition playCondition){
            this.playCondition = playCondition;
            this.lock = lock;
        }
        
        private boolean change(boolean toChange){
            return !toChange;
        }    @Override
        public void run() {
            while (true){
                lock.lock();
                try {
                    var = change(var);
                    if (var == true){
                        playCondition.signalAll();
                        lock.unlock();
                        Thread.sleep(5000);
                    }else{
                        lock.unlock();
                        Thread.sleep(10000);
                    }
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                    lock.unlock();
                }
            }
        }
        
        
        public static void main(String... args){
            final Lock lock = new ReentrantLock();
            final Condition playCondition = lock.newCondition();
            new Thread(new Activity(lock, playCondition)).start();
            new Thread(new Handler(lock, playCondition)).start();
        }
        
    }