2013-02-28 86 views
1

大家好,这样的代码可能会导致程序滞后吗?Java代码速度提升

while(true) 
if(!connected) break; 

正如我们所见,它一直在检查状况。如果我在每次迭代中设置小睡,会更快吗?

该代码在上运行Android GingerBread

编辑:

它等待其他线程完成,并连接设置为false变量。变量连接像锁一样使用。线程通常会发现它是真实的并且等待是错误的。然后设置为true并且只在最后改变它。

+1

什么是你的一个连接检查? Android中的很多连接都有与之关联的广播,这将消除完全需要这样一个循环 – 2013-02-28 12:47:50

+9

如果您没有连接,这是将手机转换为便携式加热器的好方法。 – 2013-02-28 12:48:57

+1

@AlexanderPogrebnyak我认为你错了。你能解释你的评论吗?如果'connected'是'false',他会立即从'while'循环中断开。 – jlordo 2013-02-28 12:56:52

回答

1

,我认为这将是更好地添加少量睡在你的循环,以免费的处理器资源用于其他进程,特别是在一个核处理器。

+0

请不要在Android上这样做,你不仅会破坏你的应用程序的用户体验,而且如果你的应用程序正在运行,它也会导致整体操作系统经验不足。以正确的方式做,或找到一个正确的方式。 – 2013-02-28 13:40:01

1

我相信这可能是这样的:

while(connected) { 
// do stuff... 
+1

如果第一次调用代码时连接为false,则它将永远不会运行。我非常怀疑OP希望 – 2013-02-28 12:49:25

+0

@RaghavSood由OP发布的代码在'connected'为'false'时也不会首次运行。 – jlordo 2013-02-28 12:52:42

+0

@RaghavSood你是否看到OPs'if'条件的否定。如果'connected'是'false',他的'if'条件是'true',他将'break'离开循环... – jlordo 2013-02-28 12:55:24

1

尝试这样:

private Integer connected; 
private ConnectedListener connectedListener; 

public interface ConnectedListener { 
    public void onDisconnected(); 
} 

private void startThreads() { 
    for (int i = 0; i < 10; i++) { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       synchronized (connected) { 
        connected++; 
       } 

       // do some random long work 

       synchronized (connected) { 
        connected--; 
        if (connected == 0 && connectedListener != null) { 
         //let the listener know that we are completely disconnected 
         connectedListener.onDisconnected(); 
        } 
       } 
      } 
     }).start(); 
    } 
} 
+0

这种方法比较复杂,虽然在某些应用中可能很有用。 – Balvonas 2013-02-28 13:30:40