Tag: runnable

嵌套的postDelayed / Runnable / Handler Android

我正在尝试使用嵌套的postDelayed,因为我需要在(延迟)5分钟之后做一些事情,在延迟30秒后停止它,做其他事情,然后从开始再次重复循环中的两个事件。 我似乎无法做对。 代码我有sofar: private long EnabledAfter = 300000; // 5 minutes private long DisabledAfter = 30000; // 30 seconds public void start_timers(){ on_delayed(EnabledAfter); }//end method private void on_delayed(long period_off){ Delayed = new Runnable() { public void run() { something.enable(context); something.enable_else(context, true); off_delayed(DisabledAfter); // and disable both again delayed Handler.postDelayed(Delayed, EnabledAfter); } }; Handler.postDelayed(Delayed, EnabledAfter); }//end […]

如何实现真正的异步java线程

我有一个需要执行两个操作的函数,一个快速完成,另一个需要很长时间才能运行。 我希望能够将长时间运行的操作委托给一个线程,我不关心线程何时完成,但线程需要完成。 我实现了如下所示,但是,我的第二次操作永远不会完成,因为函数在start()调用之后退出。 我如何确保函数返回但第二个操作线程也完成其执行并且不依赖于父线程? public void someFunction(String data) { smallOperation() SecondOperation a = new SecondOperation(); Thread th = new Thread(a); th.Start(); } class SecondOperation implements Runnable { public void run(){ // doSomething long running } }

为什么“实现Runnable”比“extends Thread”更受欢迎?

Java Thread本身实现了Java Runnable ! 并且根据Internet上的大多数专家, 实现Runnable比扩展Thread更受欢迎 ! 即使我们不能在Thread类的线程意义上使用Runnable ! 那么为什么我们更喜欢在扩展Thread上实现Runnable ,因为在这两种情况下都通过调用Thread实现的方法(即start()或run() )来声明实际线程,尽管在Thread情况下我们并没有真正“扩展”function通过仅覆盖run()方法的Thread ? 如果我听起来很混乱,我道歉……

为什么在java中的线程对象上调用start()时不立即调用run()

或者是吗? 我有一个线程对象来自: Thread myThread = new Thread(pObject); 其中pObject是实现Runnable接口的类的对象,然后我在线程对象上调用start方法,如下所示: myThread.start(); 现在,我的理解是当调用start()时,JVM隐式(并立即)调用run()方法,该方法可能被覆盖(就像我的情况一样) 但是,在我的情况下,似乎不立即调用start()方法(根据需要),但直到从调用块完成其他语句/方法,即如果我在start()调用之后有一个方法,如下所示: myThread.start(); doSomethingElse(); doSomthingElse()在run()方法运行之前执行。 也许我错误的初始前提是run()总是在调用start()之后调用。 请帮忙! 再次想要的是在start()之后立即执行run()。 谢谢。

即使我正在调用thread.interrupt(),线程也不会中断

我正在学习如何在Android中使用线程,为此,我做了一个小应用程序,它会播放一系列音符。 这个想法是有一个开始按钮和一个结束按钮(显然)如果按下开始按钮它开始播放音乐,如果你按下结束按钮,它就会停止。 启动按钮工作正常,但问题是结束按钮没有。 我无法弄清楚原因,所以也许你们中的一些人可以帮助我。 这是代码: public class PressAndPlay extends Activity { private volatile Thread initBkgdThread; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button startButton = (Button) findViewById(R.id.trigger); startButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { // create thread initBkgdThread = new Thread(new Runnable() { public void run() { play_music(); } }); initBkgdThread.start(); } }); […]

为什么传递给runnable的变量需要是最终的?

如果我有一个变量int x = 1 ,比如说,我在主线程中声明了一个runnable,并且我想将x传递给runnable的run()方法,那么它必须被声明为final 。 为什么? final int x = 0;//<—-must be final… private class myRun implements Runnable { @Override public void run() { x++;// } }

Java中的“实现Runnable”与“扩展线程”

从我在Java中使用线程的时间开始,我发现了这两种编写线程的方法: 使用implements Runnable : public class MyRunnable implements Runnable { public void run() { //Code } } //Started with a “new Thread(new MyRunnable()).start()” call 或者,使用extends Thread : public class MyThread extends Thread { public MyThread() { super(“MyThread”); } public void run() { //Code } } //Started with a “new MyThread().start()” call 这两个代码块有什么显着差异吗?