当前位置:操作系统 > 安卓/Android >>

用一个线程模拟多个线程,减少线程数量

游戏开发中,免不了有很多定时任务、动画效果。
这些不是在一次的流程中就能执行完毕的。
正常情况下,我会想到用线程,但是,这么多定时任务,这么多动画效果,哪能这么多线程呢?~
 
于是,笨木头有笨方法~
自己模拟一下多线程就好了嘛~不就间隔一段时间执行一个函数么,简单~
来,看看:
 
[java]
public class GameEventThread extends Thread { 
    private final String TAG = "GameEventThread"; 
     
    private int SLEEP_TIME = 10;     
     
    /* 注意咯,A_GameEvent是一个事件类,就是用来模拟子线程的 */private ArrayList<A_GameEvent> gameEventList = new  ArrayList<A_GameEvent>(); 
 
 
 
 
     
    private boolean isRun = true; 
     
    public GameEventThread(String threadName) { 
        super(threadName); 
    } 
     
    public GameEventThread(String threadName, int iSleepTime) { 
        super(threadName); 
        this.SLEEP_TIME = iSleepTime; 
    } 
 
 
    /**
     * 添加事件到线程的事件列表中
     * @param event
     */ 
    public void addGameEvent(A_GameEvent event) { 
        if(gameEventList.contains(event) == false) { 
            gameEventList.add(event); 
        } 
    } 
     
    public void stopRun() { 
        this.isRun = false; 
    } 
     
    @Override 
    public void run() { 
        Iterator<A_GameEvent> iter = null; 
        A_GameEvent event = null; 
         
        while(isRun) { 
            /* 遍历事件列表 */ 
            try { 
                iter = gameEventList.iterator(); 
                while(iter.hasNext()) { 
                    event = iter.next(); 
                     
                    /* 事件存活 */ 
                    if(event.isAlive()) { 
                        /* 到达事件执行时间 */ 
                        if(event.isAtTheTime()) { 
                            event.doEvent(); 
                        } 
                    } 
                    else { 
                        /* 事件已经不存活,删除该事件 */ 
                        iter.remove(); 
                    } 
                } 
            } catch (ConcurrentModificationException e1) { 
            } 
             
            try { 
                Thread.sleep(SLEEP_TIME); 
            } catch (InterruptedException e) { 
            } 
        } 
    } 

这是一个线程,要做的工作很简单,就是不断遍历事件列表,发现某个事件到达了执行时间,就执行该事件的回调函数~
那,那,你是不是很想问我,怎么判断事件达到了执行时间呢?~
来,听听我的做法:
[java]
public abstract class A_GameEvent implements I_GameEvent { 
    protected boolean isAlive = true; 
    private long startTime = 0; 
    private int iSleepTime = 0; 
     
    public A_GameEvent(int _iSleepTime) { 
        this.iSleepTime = _iSleepTime; 
         
        refreshStartTime(); 
    } 
     
    /* 记录开始时间 */     
    public void refreshStartTime() { 
        startTime = System.currentTimeMillis(); 
    } 
 
     
    /* 判断是否达到了时间间隔: 当前时间 - 开始时间 大于 休眠时间 */   
    public boolean isAtTheTime() { 
        long endTime =  System.currentTimeMillis(); 
        long span = endTime - startTime; 
         
        if(span >= iSleepTime) { 
            startTime = endTime; 
            return true; 
     &

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,