首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

线程实现开门后三秒自动关门

2013-07-04 
线程实现开门后三秒自动关门 在线等线程要实现 通过系统开锁 三秒后自动关锁[解决办法]private boolean fl

线程实现开门后三秒自动关门 在线等
线程要实现 通过系统开锁 三秒后自动关锁
[解决办法]


private boolean flag=true;
public void setFlase(){
this.flag=false;
}
public void setTrue(){
this.flag=true;
}
public boolean getFlag(){
return flag;
}

public void run(){
while(true){
try {
Thread.currentThread().sleep(3000);//每个100毫秒刷新一次。标准为3000毫秒发射一个
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
this.setTrue();
//System.out.println("置为true");//等待超过三秒,把Flag置为true
}
}

[解决办法]

if(opendoor()==true){
 try {                 
Thread.currentThread().sleep(3000);//线程休眠3000毫秒       
      } catch (Exception e) { 
                // TODO: handle exception        
         e.printStackTrace();       
      } 
closedoor();
}
opendoor和closedoor其实就是get和set方法。控制标记位flag这把锁
[解决办法]

  class T extends Thread{
boolean flag=false;

public void run(){
while(true){
if(!flag){
flag=true;
try{
Thread.currentThread().sleep(3000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(flag);
}
flag=false;
}
}

[解决办法]
是不是这个意思


import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class TheLock  implements Runnable{



    private Condition openCondition;
    private Condition closeCondition;
    private Lock theLock;
    
    public TheLock(){
        theLock = new ReentrantLock();
        openCondition = theLock.newCondition();
        closeCondition = theLock.newCondition();
    }
    
    @Override
    public void run() {
        new Thread(new Open(theLock, openCondition)).start();
        new Thread(new Close(theLock, closeCondition)).start();
        while(true){
            try {
                if (openTheLock() == true){
                    theLock.lock();
                    openCondition.signalAll();
                    theLock.unlock();
                    
                    Thread.sleep(3000);
                    
                    theLock.lock();
                    closeCondition.signalAll();
                    theLock.unlock();
                }else{
                    System.out.println("Open action failed");
                }
                Thread.sleep(100);


            } catch (InterruptedException ex) {
                ex.printStackTrace();
                theLock.unlock();
            }
        }
    }
    
    private boolean openTheLock(){
        return (System.nanoTime() % 3) == 1;
    }
    
    class Open implements Runnable{
        private Lock lock;
        private Condition openCondition;
        
        Open(Lock lock, Condition openCondition){
            this.lock = lock;
            this.openCondition = openCondition;
        }
        
        @Override
        public void run() {
            while (true){
                lock.lock();
                try {
                    this.openCondition.await();
                    onOpen();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } finally {
                    lock.unlock();
                }
            }


        }
        
        protected void onOpen(){
            System.out.println("Opened");
        }
        
    }
    
    
    class Close implements Runnable{
        private Lock lock;
        private Condition closeCondition;
        
        Close(Lock lock, Condition closeCondition){
            this.lock = lock;
            this.closeCondition = closeCondition;
        }
        
        @Override
        public void run() {
            while (true){
                lock.lock();
                try {
                    this.closeCondition.await();
                    onClose();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                } finally {
                    lock.unlock();
                }
            }
        }
        
        protected void onClose(){
            System.out.println("Closed");


        }
    }
    
    public static void main(String[] args){
        new Thread(new TheLock()).start();
    }
}

热点排行